Pergunta

Acabei de tropeçar na sintaxe da festa:

foo=42
bar=$[foo+1] # evaluates an arithmetic expression

Quando eu pesquisei no Google para isso, encontrei http://tldp.org/ldp/bash-beginners-guide/html/sect_03_04.html#sect_03_04_05:

3.4.6. Expansão aritmética

A expansão aritmética permite a avaliação de uma expressão aritmética e a substituição do resultado. O formato para expansão aritmética é:

$(( EXPRESSION )) 

...

Sempre que possível, os usuários do Bash devem tentar usar a sintaxe com colchetes:

$[ EXPRESSION ] 

No entanto, isso apenas calculará o resultado da expressão e não fará testes ...

Na minha página do Bash Man, só posso encontrar o $(( EXPRESSION )) forma como:

foo=42
bar=$((foo+1)) # evaluates an arithmetic expression

Então, o que os testes não são realizados com $[...] isso faz com $((...)), ou é o $[...] Apenas uma versão herdada de $((...))?

Foi útil?

Solução

A Manpage para Bash v3.2.48 diz:

...] O formato para expansão aritmética é:

     $((expression))

o O antigo formato $ [expressão] está preterido e será removido nas próximas versões do Bash.

Então $[...] é uma sintaxe antiga que não deve ser mais usada.

Outras dicas

@STH está totalmente correto. E, caso você esteja curioso sobre por que uma sintaxe mais detalhada é a favor, confira este e -mail antigo da lista de discussão.

http://lists.gnu.org/archive/html/bug-bash/2012-04/msg00033.html

“Nas propostas iniciais, foi utilizada uma forma $ [expressão]. Era funcionalmente equivalente ao "$ (())" do texto atual, mas as objeções foram apresentadas de que o Kornshell de 1988 já havia implementado "$ (())" e não havia motivo convincente para inventar mais uma sintaxe. Além disso, a sintaxe "$ [] tinha uma menor incompatibilidade envolvendo os padrões nas declarações do caso ".

Não tenho certeza se gosto da lógica "mas alguém já fez isso de maneira mais verbal", mas aí está-talvez o problema da estatuto de caso foi mais convincente do que imagino dessa menção obscura?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top