Quero exportar corretamente uma variável. Para fazer isso, preciso entender diversas variações de sintaxe. Já vi os seguintes mecanismos de exportação de uma variável. Neste caso estou usando .bashrc
:
export MY_VARIABLE=$USER/.gradle
--$export MY_VARIABLE="$USER/.gradle"
--Citaçõesexport MY_VARIABLE=USER/.gradle
--Não $export $MY_VARIABLE=$USER/.gradle
--Todos os $
Qual é o significado do sinal $ nesses casos? Por que às vezes é usado e outras vezes não?
Precisamos de aspas nos casos em que não há espaços no caminho? E se o caminho contido em $USER contiver espaços?
Por que não há $ no lado esquerdo da exportação?
Responder1
Tokens como export
, declare
e similares usam explicitamente nomes de variáveis como parâmetros. $
geralmente pode ser entendido como significando "o valor de", portanto $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ê obterá uma linha de saída em branco. Isso ocorre porque no export
comando, $foo
na verdade, é bar
(o valor de foo
), então 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
, cujo valor bar
foi export
inserido nos próximos subshells.
Geralmente é uma boa ideia usar aspas fracas (" "
") em torno detodosde suas referências de variáveis, por motivos que incluem, mas não se limitam, àqueles que você mencionou (ou seja, 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 ];
o que é válido.