Qual é a diferença entre echo $ BASH_VERSION e echo $ {BASH_VERSION}?

2

Eu vejo muita sintaxe ${VARIABLE} type em scripts. Qual é o ponto das chaves?

    
por Soren Hunt 22.10.2011 / 11:29

2 respostas

10

Delimita a variável.

Você pode precisar de $ FOO como variável, mas precisa concatenar com outro texto. Em caso afirmativo, isso não funcionará:

echo "$FOObar"

Isso vai reclamar que não há nenhuma variável $ FOObar. Para contornar isso, delimite a variável:

echo "${FOO}bar"

Isso funcionará e imprimirá o valor de $ FOO com o texto 'bar' concatenado.

É uma daquelas coisas que muitas vezes as pessoas escolhem fazer o tempo todo, para evitar problemas onde é realmente necessário. Pode ser um bom hábito entrar, já que o script bash é muito implacável com erros de sintaxe.

    
por 22.10.2011 / 11:36
5

@mauvedeity está correto. O problema não é apenas que alguns caracteres, quando escritos após uma referência de variável, são considerados parte dessa referência - é também que alguns caracteres são considerados como não como parte dele. Isso quebra, por exemplo, operações de manipulação de variáveis e uso de matrizes.

Matrizes :

$ foo=( one two three )
$ echo $foo # implied first element with index 0
one
$ echo $foo[1] # this will not work, as [1] is not considered part of variable
one[1]
$ echo ${foo[1]} # this will work
two
$ echo ${foo[*]} # all elements
one two three
$ echo ${#foo[*]} # array length
3
$ echo ${#foo[2]} # length of third element (index 2)
5

Operações variáveis

$ file=filename.txt
$ echo $file
filename.txt
$ echo ${file%.txt} # remove last match of .txt in $file
filename

Tudo isso falharia (conforme ilustrado no exemplo da matriz) se não definíssemos explicitamente os delimitadores para a referência de variável.

    
por 22.10.2011 / 13:38

Tags