Was bedeutet ein Dollarzeichen gefolgt von einer eckigen Klammer […] in Bash?


34

Es scheint, dass $[expr]die arithmetische Expansion genauso ausgeführt wird $((expr)). Aber ich kann keine Erwähnung $[in der Bash-Anleitung finden. Dieser Befehl liefert keine Ergebnisse:

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

Was ist dieser Operator und ist sein Verhalten überall standardisiert?

Meine Bash-Version: GNU Bash, Version 3.2.51 (1) -Release (x86_64-apple-darwin13)


3
So beantworten Sie Ihre Frage zu einem Standard explizit : Die (veraltete) bashspezifische $[...]Syntax entspricht nicht dem Standard. Das $((...))(was von stammt ksh) ist POSIX-Standard.
Janis

2
Mit Ubuntu 11.04: man bash | grep -E '\$\['. Ausgabe: Das alte Format $ [Ausdruck] ist veraltet und wird in zukünftigen Versionen entfernt
Cyrus

man-seiten können dinge wie _t_h_i_s enthalten (die dann vom man-dienstprogramm so interpretiert werden, dass sie anders aussehen), sodass dein grep fehlschlagen kann, wenn das, was du suchst, wie folgt vermerkt wird
Olivier Dulac

Antworten:


19

Hier finden Sie alte Bash-Quellen . Insbesondere habe ich heruntergeladen bash-1.14.7.tar.gz . In der documentation/bash.txtfinden Sie:

Arithmetische Erweiterung

Die arithmetische Erweiterung ermöglicht die Auswertung eines arithmetischen Ausdrucks und die Substitution des Ergebnisses. Es gibt zwei Formate für die arithmetische Erweiterung:

     $[expression]

     $((expression))

Die Verweise auf $[gehen doc/bash.htmlaus dem bash-doc-2.0.tar.gz-Download und demNEWS Datei wird erwähnt:

Die $[...]arithmetische Expansionssyntax wird zugunsten von nicht mehr unterstützt $((...)).

$((...)) ist auch die Standardsyntax für eine arithmetische Erweiterung, wurde jedoch möglicherweise später als in der ursprünglichen Bash-Implementierung zum Standard hinzugefügt.

Scheint $[...]jedoch immer noch in Bash 5.0 zu funktionieren, sodass es nicht vollständig entfernt wird.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.