Diese Frage besteht aus zwei Teilen:
(a) Verstehen, was der abgeschnittene Code tut
(b) Verständnis des Unterschieds zwischen Exit-Status und Return-Status im Kontext von bash
.
Hier ist der Code, den ich zu verstehen versuche:
if var=-2 && (( var+=2 ))
then
echo "True"
else
echo "False"
fi
Das Ausführen erzeugt False
. Ich kann nicht verstehen, warum das passiert.
Wenn ich das richtig verstehe, passiert hier vielleicht was mit der if
Bedingung:
(a) var=-2
erstellt den Exit-Status 0, da die Zuweisung erfolgreich ist
(b) (( var+=2 ))
addiert 2 zum Wert von var
und der Ausdruck wertet Null aus. Der Exit-Status ist also 1 für diesen Begriff
(c) 0 && 1 erzeugt einen existierenden Status von 0, der dann vom if
Konstrukt verwendet wird
Das if
Konstrukt soll einfach den Exit-Status überprüfen und wenn es Null ist, nimmt es den Then- Pfad. In Schritt (c) oben ist es Null, aber das Skript nimmt immer noch den else- Pfad. Ist das richtig, um das zu verstehen?
Außerdem sehe ich immer wieder, dass verschiedene bash
Texte den Exit-Status und den Return-Status austauschbar verwenden.
Ich bezweifle, dass die var=-2
Zuweisung einen Exit-Status haben würde, da es sich nicht um ein Programm handelt. Aber jede Klarstellung über den Unterschied zwischen zwei wird großartig sein.
man bash
: expression1 && expression2 True, wenn sowohl expression1 als auch expression2 true sind. Ausdruck1 || expression2 True, wenn entweder expression1 oder expression2 true ist. Die && und || Operatoren bewerten expression2 nicht, wenn der Wert von expression1 ausreicht, um den Rückgabewert des gesamten bedingten Ausdrucks zu bestimmen.
0 && 1
in der Tat ist 1
.
i=0; ((i++))
ein fehlgeschlagener Exit-Status, während i=0; ((++i))
ein erfolgreicher ist. In einem arithmetischen Kontext sind positive ganze Zahlen wahr und Null ist falsch.
#!/bin/bash -x
zu sehen, was passiert