Qual é a melhor prática entre usar $ {var} ou $ var? [duplicado]

0

Eu sei que ${var} e $var fazem a mesma coisa. Eu também sei que você pode usar chaves para opções avançadas como ${var:=word} ou ${var#pattern} . Também é explicado aqui .

Mas vejo em alguns scripts bash o uso de chaves na forma mais simples: ${var} e às vezes vejo apenas essa notação $var .

Existe alguma razão para preferir esta sintaxe ao simples $var , pois faz a mesma coisa? É para portabilidade? É um estilo de codificação?

Como um desenvolvedor consciencioso, qual sintaxe devo usar?

    
por Nairolf21 09.06.2016 / 11:34

2 respostas

6

É por uma questão de clareza. Como apontado por arzyfex, há uma diferença entre ${foo}_bar e $foo_bar . Sempre use chaves, e você nunca cometerá esse erro. Observe também que você precisa das chaves se desejar se referir a parâmetros posicionais com mais de um dígito, por exemplo, ${11} .

    
por 09.06.2016 / 11:58
3

{} é conhecido como brace expansion . ${} é conhecido como expansão variável. As variáveis são declaradas e atribuídas sem $ e sem {} . Você tem que usar

foo=50

para atribuir. Para ler a variável (em outras palavras, 'expandir' a variável), você deve usar $ .

$foo      // use the variable
${foo}    // same as above
${foo}bar // expand foo, and append "bar" too
$foobar   // same as ${foobar}, i.e expand a variable called foobar, if it exists.

Isso me confundiu às vezes - em outras linguagens nos referimos à variável da mesma maneira, independentemente de estar à esquerda ou à direita de uma atribuição. Mas o shell-scripting é diferente, $foo=50 não faz o que você pensa que faz!

As chaves também são usadas para executar uma sequência de comandos no contexto da shell atual , por exemplo

$ { date; top -b -n1 | head ; } >logfile 
# 'date' and 'top' output are concatenated, 

$ { date; make 2>&1; date; } | tee logfile
# now we can calculate the duration of a build from the logfile
    
por 09.06.2016 / 11:39

Tags