Bash wenn Statements immer Null zurückgeben?Bash, wenn immer Null zurückgibt?
Ich versuchte
$ if false; then echo hi; fi;
$ echo $?
und es scheint, wie es.
Bash wenn Statements immer Null zurückgeben?Bash, wenn immer Null zurückgibt?
Ich versuchte
$ if false; then echo hi; fi;
$ echo $?
und es scheint, wie es.
Von help if
:
if
:if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi
Befehle ausführen, basierend auf an Bedingungen geknüpft.
Die
if COMMANDS
Liste wird ausgeführt. Wenn sein Exit-Status Null ist, dann ist diethen COMMANDS
Liste ausgeführt wird. Andernfalls jedeelif COMMANDS
Liste ist wiederum ausgeführt wird, und wenn sein Beendigungsstatus Null ist, wird die entsprechendethen COMMANDS
Liste ausgeführt, und das, wenn der Befehl abgeschlossen ist. Ansonsten wird dieelse COMMANDS
Liste ausgeführt, falls vorhanden. Der Exit-Status des gesamten Konstrukts ist der Beendigungsstatus des letzten Befehls ausgeführt wird, oder Null, wenn keine Bedingung wahr getestet.Ausgangsstatus: Gibt den Status des letzten ausgeführten Befehls zurück.
(betonen und formatieren meins).
Also, wenn es kein else
Teil, und wenn der Befehl endet mit einem Nicht-Null-Code getestet wird, dann wird der Return-Code ist 0.
(Aber die Aussage bash, wenn Anweisungen geben immer Null ist falsch, wie in dem hervorgehobenen Teil von help if
angegeben, der oben eingeschlossen ist).
* Exit-Status des letzten ausgeführten Befehls *, daher wird möglicherweise keine Null zurückgegeben: 'if true; dann ls nicht existierende Datei; fi' gefolgt von 'echo $?' ergibt '1'. – cdarke
@cdarke: Ich war sicher, dass jemand auf diese argumentieren würde, so begann ich die Antwort der Bearbeitung einer Notiz zu schließen, bis ich merkte, ich 'help if' wurde paraphrasiert. Also habe ich den Schnitt abgebrochen, in der Hoffnung, dass die Leser den Inhalt von "help if" lesen würden, den ich aufgenommen habe. –
@cdarke, insbesondere der hervorgehobene Inhalt: *** Der Exit-Status des gesamten Konstrukts ist der Exit-Status des zuletzt ausgeführten Befehls, *** ** oder Null, wenn keine Bedingung auf True geprüft wurde. ** –
Einfaches Gegenbeispiel: 'Wenn true; dann falsch; fi ' – chepner