bash: $ [] vs. $ (())
-
19-09-2019 - |
Frage
Ich habe stolperte über die Bash-Syntax:
foo=42
bar=$[foo+1] # evaluates an arithmetic expression
Wenn ich für diese googeln, fand ich http: // tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html#sect_03_04_05 :
3.4.6. Arithmetic Erweiterung
Arithmetic Erweiterung ermöglicht die Auswertung eines arithmetischen Ausdrucks und die Substitution des Ergebnisses. Das Format für arithmetische Erweiterung ist:
$(( EXPRESSION ))
...
Wo immer möglich, Bash-Benutzer sollten versuchen, die Syntax mit eckigen Klammern zu verwenden:
$[ EXPRESSION ]
Dies wird jedoch nur das Ergebnis des Ausdrucks berechnen, und tut keine Tests ...
In meiner bash man-Seite kann ich nur die $(( EXPRESSION ))
Form finden wie:
foo=42
bar=$((foo+1)) # evaluates an arithmetic expression
Also, was Tests werden nicht mit $[...]
durchgeführt, die mit $((...))
tun, oder ist das $[...]
nur eine Vorgängerversion von $((...))
?
Lösung
Die Hilfeseite für bash v3.2.48 sagt:
[...] Das Format für arithmetische Erweiterung ist:
$((expression))
Das alte Format $ [Ausdruck] ist veraltet und wird in den kommenden Versionen entfernt werden bash.
So $[...]
ist alte Syntax, die nicht mehr verwendet werden soll.
Andere Tipps
@sth ist ganz korrekt. Und falls Sie neugierig zu wissen, warum eine ausführlichere Syntax ist nun für Besuche diese alte E-Mail aus der Mailing-Liste.
http://lists.gnu.org/archive/html/bug -bash / 2012-04 / msg00033.html
„Anfang Vorschläge, eine Form $ [Ausdruck] verwendet wurde. Es war funktionell entspricht dem „$ (())“ des aktuellen Textes, aber Einwände eingereicht, dass die 1988 Kornshell hatte bereits umgesetzt „$ (())“ und es gab keinen zwingenden Grund, noch eine andere Syntax zu erfinden. Darüber hinaus hatte die „$ []“ Syntax eine geringe Inkompatibilität beteiligt die Muster bei Aussagen“.
Ich bin nicht sicher, dass ich die Gründe mögen „aber jemand hat dies bereits mehr verbosely getan“, aber dort haben Sie es, vielleicht der Fall-Anweisung Problem war, zwingender als ich von dieser obskuren Erwähnung vorstelle?