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 , :
über true
.
Beachten Sie einen weiteren Unterschied bei POSIX-Shells (z. B. bash
nur im POSIX-Modus): while true
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:
$ sh -c ': > / ; echo HERE'
sh: 1: cannot create /: Is a directory
$ sh -c 'true > /; echo HERE'
sh: 1: cannot create /: Is a directory
HERE
in var=value :
, var
bleibt value
nach :
Rücksendung gesetzt, nicht bei true
:
$ var=1; var=2 : ; echo "$var"
2
$ var=1; var=2 true; echo "$var"
1
Beachten Sie auch , dass die || true
Arbeiten in Schalen von der rc
und csh
Familien , aber nicht || :
(aber nicht abbrechen set -e
in csh
).
|| :
ist nicht dasselbe wie :
. Es bedeutet oder läuft :
anders (das heißt, wenn die vorhergehende Pipeline ausfällt).
set -e
false
Würde bewirken , dass die Schale zu Ausfahrt aufgrund set -e
und false
hat einen von Null (failure) Exit - Status. Der set -e
Effekt wird abgebrochen, wenn der Befehl, der einen Exit-Status ungleich Null zurückgibt, als Bedingung verwendet wird, wie in:
if false; then ...
while false; do ...
false && : ...
false || : ...
false && :
nur storniert set -e
. false || :
Bricht set -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).
||:
(ohne Leerzeichen) auch in bash gültig ist. Es macht das Gleiche wie|| :
oder|| true
.