Ich mache nicht sonderlich viel Shell-Scripting, deshalb war ich ein wenig überrascht, als ich die Dokumentation fürgit submodule
las und die Syntax sah, die sie in dieser Dokumentation verwendeten:
Eine Rückgabe ungleich Null vom Befehl in einem Submodul führt zum Abbruch der Verarbeitung. Dies kann durch Hinzufügen
|| :
am Ende des Befehls überschrieben werden .
Ich musste nachschlagen, || :
um einen Befehl zum erfolgreichen Beenden zu zwingen. Jedes Mal, wenn ich einen Befehl erfolgreich beenden musste, habe ich verwendet || true
. Wird || :
als idiomatischer angesehen?
||:
(ohne Leerzeichen) auch in bash gültig ist. Es macht das Gleiche wie|| :
oder|| true
.Antworten:
true
wurde nicht in die Bourne-Shell eingebaut.:
immer war (es war der Weg, Kommentare einzugeben, bevor#
eingeführt wurde).Das, und weil es kürzer Typ ist , ist wahrscheinlich der Hauptgrund , warum Menschen es vorziehen ,
:
übertrue
.Beachten Sie einen weiteren Unterschied bei POSIX-Shells (z. B.
bash
nur im POSIX-Modus): whiletrue
ist ein reguläres Builtin (muss nicht einmal eingebaut sein),:
ist ein spezielles Builtin. Dies hat einige Auswirkungen, von denen die meisten in diesem speziellen Fall wahrscheinlich keine Auswirkungen haben:Wenn ein
:
Befehl fehlschlägt, auch aufgrund einer fehlgeschlagenen Umleitung, wird die Shell beendet. In der Praxis wird das wahrscheinlich keinen Unterschied machen, wenn Sie Weiterleitungen an weiterleiten:
in
var=value :
,var
bleibtvalue
nach:
Rücksendung gesetzt, nicht beitrue
:Beachten Sie auch , dass die
|| true
Arbeiten in Schalen von derrc
undcsh
Familien , aber nicht|| :
(aber nicht abbrechenset -e
incsh
).|| :
ist nicht dasselbe wie:
. Es bedeutet oder läuft:
anders (das heißt, wenn die vorhergehende Pipeline ausfällt).Würde bewirken , dass die Schale zu Ausfahrt aufgrund
set -e
undfalse
hat einen von Null (failure) Exit - Status. Derset -e
Effekt wird abgebrochen, wenn der Befehl, der einen Exit-Status ungleich Null zurückgibt, als Bedingung verwendet wird, wie in:false && :
nur storniertset -e
.false || :
Brichtset -e
den Exit-Status ab und setzt ihn auf,0
so dass es idiomatischer ist, zu sagen, dass wir einen fehlerhaften Exit-Code des Befehls ignorieren möchten. Die meisten würden argumentieren, dass dies|| true
besser lesbar ist (was die Absicht klarer vermittelt).quelle
&& :
ist genial, gibt es irgendwelche Dokumente oder weiterführende Literatur dazu? Google fällt mir beim Versuch, diese Art von Keywords zu finden, nicht aus…Im Allgemeinen ist in bash der Doppelpunkt
:
undtrue
gleichwertig.Ich denke, es basiert auf dem Kontext .
Wenn Sie möchten
return value
, dass a oder acondition
immer wahr ist, sollten Sie eintrue
Schlüsselwort verwenden. Dadurch wird Ihr Code klarer und die Betrachter erfahren, dass Sie den Wert wahr hervorheben möchten , dh:oder
Und wenn Sie nichts tun möchten oder
NOP
in der Shell, sollten Sie Doppelpunkt verwenden:
oder
quelle
Die meisten dieser Antworten richten sich nicht an die am häufigsten verwendete Verwendung von
:
.Erstens bezieht sich diese Diskussion nicht auf eine Shell, die kein Bourne-shell (
sh
) -Derivat ist. Das heißt, alle Bourne-Derivat-Shells sehentrue
und:
als das Gleiche. Früher wurden Programmierer dazu ermutigt,:
anstelle von zu verwendentrue
, da:
es immer eine integrierte Version gibt, während es früher Fälle gab, in denentrue
nicht immer eine integrierte Version vorhanden war.:
hat zwei Verwendungen. Es ist kein Synonym für#
, hat aber eine andere Funktion. Wenn Sie Ihr Skript unter a debuggenset -x
, werden Zeilen, in denen sie#
verwendet werden, vom Parser gelöscht und vollständig ignoriert, während Zeilen mit:
analysiert und ausgewertet werden. Dies ist beim Debuggen sehr nützlich, da in-x
diesen Zeilen der Wert nach der Auswertung angezeigt wird. Es ist, als würden Sieprint
Anweisungen in Ihren Code einfügen, die nur im-x
Modus angezeigt werden. Seien Sie vorsichtig mit den Werten nach dem,:
da es sich um echten Code handelt und die Nebenwirkungen Ihr Programm beeinflussen können.quelle