Ich entschuldige mich im Voraus, wenn dies eine doppelte Frage ist. Ich habe mich bemüht zu suchen / zu überprüfen, bevor ich hier gefragt habe.
Ich schreibe gerne Einzeiler wie folgt:
foocommand && foocommand2 && foocommand3
Die Idee ist, dass nachfolgende Befehle nur ausgeführt werden sollen, wenn der vorherige "erfolgreich" war.
Ich schreibe ein etwas langwieriges Skript und dieser Einzeiler ist nicht machbar, weil er für alle anderen wie ein riesiger Block verwirrenden Codes aussieht.
Ich möchte die Befehle ausräumen und Kommentare dazwischen im Skript schreiben. Wie kann ich das tun und habe trotzdem das Äquivalent von && drin?
||
und wird &&
(im Gegensatz zu |
oder &
) Kurzschluss genannt. Das mit den letzteren Operatoren verwendete Verhalten wird als eifrige Auswertung bezeichnet.
a && b && c
wird nur ausgeführt, b
wenn dies a
erfolgreich ist. "Es wird nur ausgeführt, c
wenn dies b
erfolgreich ist" und "Es wird nur ausgeführt, c
wenn a
und b
beide erfolgreich sind" sind äquivalente Anweisungen: b
Kann nicht erfolgreich sein, wenn dies nicht a
erfolgreich ist.
a || b && c
ist anschaulicher.
true || false && echo hi
wird ausgegeben hi
. Die Spezifikation lautet, Die Operatoren "&&" und "||" haben die gleiche Priorität und werden mit linker Assoziativität bewertet.
&&
bedeutet nicht , der nachfolgende Befehl wird ausgeführt , wenn der vorherige ein erfolgreich war. Es bedeutet , dass der Befehl ausgeführt werden soll , wenn das kollektive Ergebnis von all den vorherigen Befehlen in der Befehlsliste ist der Erfolg. Sie wissen das vielleicht, aber zukünftige Leser verstehen das vielleicht falsch.