Que signifie un signe dollar suivi d'un crochet $ […] en bash?

34

Il semble que $[expr]effectue une expansion arithmétique, tout comme $((expr)). Mais je ne trouve aucune mention de $[dans le manuel de bash. Cette commande ne donne aucun résultat:

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

Quel est cet opérateur et son comportement est-il standardisé n'importe où?

Ma version de bash: GNU bash, version 3.2.51 (1) - release (x86_64-apple-darwin13)

AmadeusDrZaius
la source
3
Pour répondre explicitement à votre question sur un standard : La syntaxe bashspécifique (obsolète) $[...]est non standard. Le $((...))(qui en découle ksh) est le standard POSIX.
Janis
2
Ubuntu 11.04: man bash | grep -E '\$\['. Sortie: L'ancien format $ [expression] est obsolète et sera supprimé dans les prochaines versions
Cyrus
Les pages de manuel peuvent contenir des éléments tels que _t_h_i_s (qui est ensuite interprété par l'utilitaire man de manière à apparaître différemment), de sorte que votre grep puisse échouer si cela se produisait et que la recherche devait être notée comme ceci
Olivier Dulac

Réponses:

19

Vous pouvez trouver l' ancienne source bash ici . En particulier, j'ai téléchargé bash-1.14.7.tar.gz . Dans le documentation/bash.txtvous trouverez:

Expansion arithmétique

L'expansion arithmétique permet l'évaluation d'une expression arithmétique et la substitution du résultat. Il existe deux formats d’expansion arithmétique:

     $[expression]

     $((expression))

Les références à $[sont partis dans doc/bash.htmlle téléchargement bash-doc-2.0.tar.gz et le NEWSfichier mentionne que:

La $[...]syntaxe d'expansion arithmétique n'est plus prise en charge, en faveur de $((...)).

$((...))est également la syntaxe standard pour une expansion arithmétique, mais peut avoir été ajoutée à la norme plus tard que l'implémentation Bash d'origine.

Cependant, $[...]semble toujours fonctionner dans Bash 5.0, il n'est donc pas complètement supprimé.

Trauma numérique
la source
27

Dans un fil de discussion de la liste de diffusion GNU bash , il est indiqué que la $[syntaxe était une syntaxe ancienne qui était déconseillée $((, car cette dernière était déjà utilisée par le shell Korn.

Selon ce site , le manuel de bash 3.2.48 contenait une référence à la $[syntaxe. On peut donc supposer que cette référence a été supprimée en 3.2.51.

AmadeusDrZaius
la source