Bash変数置換の二重引用符

Bash変数置換の二重引用符

スクリプトを使用して一部のパッケージを構成しようとすると、次の問題が発生します。環境変数がPREFIXソフトウェアをインストールする場所に設定されているとします。私のスクリプトの中では

CONFOPTS="--enable-shared --with-blas=\"-L${PREFIX}/lib/ -lblas\" --with-lapack=\"-L${PREFIX}/lib -llapack\""
echo CONFOPTS=$CONFOPTS    

印刷

CONFOPTS=--enable-shared --with-blas="-L/scratch/test/lib/ -lblas" --with-lapack="-L/scratch/test/lib -llapack"

後でスクリプトで構成を実行する場合

set -x
./configure --prefix=${PREFIX} ${CONFOPTS}
set +x

それは拡張される

 ./configure --prefix=/scratch/test --enable-shared '--with-blas="-L/scratch/test/lib/' '-lblas"' '--with-lapack="-L/scratch/test/lib' '-llapack"'

これはごみで、構成スクリプトとシェルによって誤解されます。正しいこと

./configure --prefix=/scratch/test --enable-shared --with-blas="-L/scratch/test/lib/ -lblas" --with-lapack="-L/scratch/test/lib -llapack"

設定呼び出しで正しいコマンドラインを取得できるように動作をどのように変更できますか?

答え1

オプションを配列に入れて参照できます。

declare -a CONFOPTS
CONFOPTS=(
    '--enable-shared'
    "--with-blas=-L${PREFIX}/lib/ -lblas"
    "--with-lapack=-L${PREFIX}/lib -llapack"
)


./configure --prefix="${PREFIX}" "${CONFOPTS[@]}"

オプションを正しく区別したかどうかはわかりません。調整にお手伝いが必要な場合はお知らせください。


これらの二重引用符を保持して渡す必要がある場合は、configure以下を試してください。

declare -a CONFOPTS
CONFOPTS=(
    '--enable-shared'
    '--with-blas="-L${PREFIX}/lib/ -lblas"'
    '--with-lapack="-L${PREFIX}/lib -llapack"'
)


./configure --prefix="${PREFIX}" "${CONFOPTS[@]}"

これも? :

declare -a CONFOPTS
CONFOPTS=(
    '--enable-shared'
    "--with-blas=\"-L${PREFIX}/lib/ -lblas\""
    "--with-lapack=\"-L${PREFIX}/lib -llapack\""
)


./configure --prefix="${PREFIX}" "${CONFOPTS[@]}"

関連情報