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 $((...))?

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top