Qual é a diferença entre:
./script.sh "$VARIABLE"
e
./script.sh ${VARIABLE}
Existe algum?
Responder1
$VARIABLE
e ${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 VARIABLE1
definida
Mas se você usar
echo ${VARIABLE}1
você obtém o USER1
resultado 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.