Passando variáveis ​​para script

Passando variáveis ​​para script

Qual é a diferença entre:

./script.sh "$VARIABLE"

e

./script.sh ${VARIABLE}

Existe algum?

Responder1

$VARIABLEe ${VARIABLE}são efetivamente iguais se forem palavras independentes. Mas observe o exemplo a seguir, especialmente em um script

VARIABLE=USER
echo $VARIABLE

você obtém saída

USER

mas quando você digita

echo $VARIABLE1

esperando conseguir

USER1

você não ganha nada, pois não há variável VARIABLE1definida

Mas se você usar

echo ${VARIABLE}1

você obtém o USER1resultado esperado.

Responder2

de Shawn J. Goff:$VAR vs ${VAR} e citar ou não citar

VAR=$VAR1 é uma versão simplificada de VAR=${VAR1}. Há coisas que o segundo pode fazer que o primeiro não pode, por exemplo, referenciar um índice de array (não portátil) ou remover uma substring (portátil POSIX). Consulte a seção Mais sobre variáveis ​​do Guia Bash para Iniciantes e Expansão de Parâmetros na especificação POSIX.

Usar aspas em torno de uma variável como em rm -- "$VAR1" ou rm -- "${VAR}" é uma boa ideia. Isso torna o conteúdo da variável uma unidade atômica. Se o valor da variável contém espaços em branco (bem, caracteres na variável especial $IFS, espaços em branco por padrão) ou caracteres globbing e você não o cita, então cada palavra é considerada para geração de nome de arquivo (globbing) cuja expansão produz tantos argumentos para o que quer que você esteja fazendo.

informação relacionada