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[@]}"

관련 정보