
Ich habe folgenden Code ausprobiert.
if diff f1.sh f2.sh; then
echo Same
else
echo Different
fi
Hier.. In meinem Fall beidesf1.shUndf2.shsind verschiedene Dateien.. Also wenn Anweisung drucktAnders(wie erwartet) Aber wie wird der ZustandFALSCHund die Steuerung ändert sich zur else-Anweisung... Wie passiert das... Wie wird die Bedingung falsch...? Wie verhält sich dieser Diff-Befehl hier... Bitte erklären Sie den Vorgang ausführlich... Vielen Dank im Voraus (tut mir leid, wenn mein Englisch zu schlecht ist...)
Antwort1
Dies ist beabsichtigt. Wenn Sie sich die diff
Manualpage ansehen, werden Sie diese Aussage sehen:
Der Beendigungsstatus ist 0, wenn die Eingaben gleich sind, 1, wenn sie unterschiedlich sind, und 2, wenn ein Problem vorliegt.
Der Beendigungsstatus ist für die Shell 0
relevant true
, daher wird „Same“ angezeigt. In beiden anderen möglichen Status wird „Different“ angezeigt, da alles, was ungleich Null ist false
, .
Das if
Verhalten wird in der Shell-Manpage beschrieben, hier beispielsweise bash
:
if list; then list; [ elif list; then list; ] ... [ else list; ] fi
Die if-Liste wird ausgeführt. Wenn ihr Exit-Status Null ist, wird die then-Liste ausgeführt. Andernfalls wird jede elif-Liste nacheinander ausgeführt, und wenn ihr Ausgang Status ist Null, die entsprechende Liste wird ausgeführt und der Befehl abgeschlossen ist. Andernfalls wird die else-Liste ausgeführt, falls vorhanden. Der Exit-Status ist der Beendigungsstatus des zuletzt ausgeführten Befehls oder Null, wenn keine Bedingung vorliegt. hat sich als wahr erwiesen.