Explicação básica da sintaxe para variáveis ​​​​no bashrc

Explicação básica da sintaxe para variáveis ​​​​no bashrc

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:

  1. export MY_VARIABLE=$USER/.gradle--$

  2. export MY_VARIABLE="$USER/.gradle"--Citações

  3. export MY_VARIABLE=USER/.gradle--Não $

  4. 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, declaree similares usam explicitamente nomes de variáveis ​​como parâmetros. $geralmente pode ser entendido como significando "o valor de", portanto $variablesignifica "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 exportcomando, $foona verdade, é bar(o valor de foo), então o comando real executado é export bar. Como foonã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 barfoi exportinserido 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 letterestavam 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.

informação relacionada