O que significa um sinal de cifrão seguido de colchete $ […] na festança?

34

Parece que $[expr]realiza a expansão aritmética da mesma forma $((expr)). Mas não consigo encontrar nenhuma menção $[no manual do bash. Este comando não fornece resultados:

gunzip -c /usr/share/man/man1/bash.1.gz | grep -E '\$\['

O que é esse operador e seu comportamento é padronizado em qualquer lugar?

Minha versão do bash: GNU bash, versão 3.2.51 (1) -release (x86_64-apple-darwin13)

AmadeusDrZaius
fonte
3
Para responder explicitamente à sua pergunta sobre um padrão : A sintaxe bashespecífica (obsoleta) $[...]não é padrão. O $((...))(que resulta ksh) é o padrão POSIX.
Janis
2
Com o Ubuntu 11.04: man bash | grep -E '\$\['. Saída: O velho formato $ [expressão] é obsoleto e será removido em versões futuras
Cyrus
páginas man poderia conter coisas como _t_h_i_s (que é então interpretado pelo utilitário homem, de modo a aparecer de forma diferente) para que o seu grep pode falhar se isso acontece a coisa que você procurar deveria ser observado como esta
Olivier Dulac

Respostas:

19

Você pode encontrar a fonte antiga do bash aqui . Em particular, baixei o bash-1.14.7.tar.gz . No documentation/bash.txtvocê encontrará:

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. Existem dois formatos para expansão aritmética:

     $[expression]

     $((expression))

As referências $[são encontradas no downloaddoc/bash.html do bash-doc-2.0.tar.gz e o NEWSarquivo menciona que:

A $[...]sintaxe de expansão aritmética não é mais suportada, a favor de $((...)).

$((...))também é a sintaxe padrão para uma expansão aritmética, mas pode ter sido adicionada ao padrão posteriormente à implementação original do Bash.

No entanto, $[...]ainda parece funcionar no Bash 5.0, portanto não é completamente removido.

Trauma Digital
fonte
27

Em um tópico na lista de discussão do GNU bash , ele diz que a $[sintaxe era uma sintaxe anterior que foi preterida em favor de $((, uma vez que o último já era usado pelo shell Korn.

De acordo com este site , o manual do bash 3.2.48 continha uma referência à $[sintaxe. Portanto, presumivelmente, essa referência foi removida em 3.2.51.

AmadeusDrZaius
fonte