In der testVergangenheit existierte der Befehl zuerst (mindestens bis zur siebten Unix-Ausgabe 1979). Es verwendet die Operatoren =und !=Zeichenfolgen zu vergleichen, und -eq, -ne, -ltetc. Zahlen zu vergleichen. Zum Beispiel test 0 = 00ist falsch, ist aber test 0 -eq 00wahr. Ich weiß nicht, warum diese Syntax gewählt wurde, aber es könnte sein, dass die Verwendung von <und >vermieden wurde, was die Shell als Umleitungsoperatoren analysiert hätte. Der testBefehl bekam eine andere Syntax ein paar Jahre später: [ … ]entspricht test ….
Die [[ … ]]bedingte Syntax, in dessen Innerem <und >können als Betreiber verwendet werden , ohne zu zitieren, wurde später hinzugefügt, in KSH. Es wurde die Abwärtskompatibilität mit beibehalten [ … ], daher wurden dieselben Operatoren verwendet, jedoch Zeichenfolgen hinzugefügt <und >verglichen (z. B. [[ 9 > 10 ]]aber [[ 9 -lt 10 ]]). Weitere Informationen finden Sie unter Verwenden der einfachen oder doppelten Klammer - bash
Arithmetische Ausdrücke kamen auch später als der testBefehl in der Korn-Shell , irgendwann in den 1980er Jahren. Sie folgten der Syntax der C-Sprache, die in Unix-Kreisen sehr beliebt war. Also benutzten sie die Operatoren von C: ==für Gleichheit, <=für weniger oder gleich usw.
Unix Seventh Edition verfügte nicht über arithmetische Ausdrücke, sondern über den exprBefehl , der auch eine C-ähnliche Syntax für Ganzzahloperationen einschließlich der Vergleichsoperatoren implementierte. In einem Shell-Skript müssen die Zeichen <und >in Anführungszeichen gesetzt werden, um sie vor der Shell zu schützen, z . B. if expr 1 \< 2; …entspricht if test 1 -lt 2; …. Das Hinzufügen von arithmetischen Ausdrücken zur Shell machte die meisten Verwendungen exprüberflüssig, so dass es heute nicht mehr bekannt ist.
In einem sh-Skript verwenden Sie im Allgemeinen arithmetische Ausdrücke, um einen Ganzzahlwert zu berechnen und Ganzzahlen [ … ]zu vergleichen.
if [ "$((x + y))" -lt "$z" ]; then …
In einem ksh-, bash- oder zsh-Skript können Sie ((…))beides verwenden.
if ((x + y < z)); then …
Das [[ … ]]Formular ist nützlich, wenn Sie Bedingungen verwenden möchten, bei denen es sich nicht um Ganzzahlen handelt.
= != < <= > >=Saiten vergleichen .1 -eq 01aber1 != 01und8 -lt 42doch8 > 42