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

1

Eu quero exportar corretamente uma variável. Para fazer isso, preciso entender várias variações na sintaxe. Eu 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 --No $

  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 estiver contido em $ USER contiver espaços?

Por que não $ no lado esquerdo da exportação?

    
por P.Brian.Mackey 23.05.2017 / 15:21

1 resposta

2

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.

    
por 23.05.2017 / 18:07