Double Quotes na substituição de variáveis de Bash

3

Estou tentando configurar alguns pacotes de software com um script, portanto, tenho o seguinte problema. Suponha que a variável de ambiente PREFIX esteja definida para o local onde pretendo instalar o software. Dentro do meu script eu tenho

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

que imprime

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

Se quiser executar o configure depois no script

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

é expandido para

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

que é lixo e mal interpretado pelo script de configuração e pelo shell. O correto seria

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

Como posso alterar o comportamento de modo a obter uma linha de comando adequada na chamada de configuração?

    
por M.K. aka Grisu 03.01.2018 / 13:48

1 resposta

1

Coloque suas opções em uma matriz e, em seguida, você pode citar:

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


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

Não sei se separei as suas opções corretamente. Por favor, deixe-me saber se você precisa de ajuda para fazer ajustes.

Se você realmente precisar manter essas aspas duplas e passá-las para configure , tente isto:

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


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

Ou mesmo isso?:

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


./configure --prefix="${PREFIX}" "${CONFOPTS[@]}"
    
por 03.01.2018 / 13:57