Tokens como export , declare e semelhantes usam explicitamente nomes de variáveis como parâmetros. $ geralmente pode ser entendido como "o valor de", então $variable significa "o valor de variable ". Tome este conjunto de comandos:
foo=bar
bar=baz
export $foo
( echo "$foo" )
O que acontecerá aqui é que você terá uma linha em branco de saída. Isso ocorre porque no comando export , $foo é realmente bar (o valor de foo ), portanto, o comando real executado é export bar . Como foo não é exportado, seu valor padrão é nulo. No entanto, se a última linha fosse:
( echo "$bar" )
Você obteria a saída de baz , o valor de bar que havia sido export em subpós próximos.
Geralmente, é uma boa ideia usar aspas fracas (" " ") em torno de todas suas referências de variáveis, por motivos que incluem, mas não se limitam ao que você mencionou (por exemplo, espaços em nomes de arquivos e caminhos). Por exemplo, se tivéssemos:
if [ $letter == a ]; then echo "ayyyy"; fi
mas letter estavam vazios, o shell tentaria executar
if [ == a ]
que é um erro de sintaxe, mas com aspas:
if [ "$letter" == a ];
torna-se
if [ "" == a ];
que é válido.