truenie został wbudowany w powłokę Bourne'a. :zawsze tak było (był to sposób wprowadzania komentarzy przed #wprowadzeniem).
To, a bo to krótsze typu jest prawdopodobnie głównym powodem ludzie wolą :się true.
Zauważ kolejną różnicę w powłokach POSIX (dla bash, tylko w trybie POSIX): chociaż truejest to zwykłe narzędzie wbudowane (nawet nie musi być wbudowane), :to jest ono narzędziem specjalnym . Ma to kilka implikacji, z których większość prawdopodobnie nie będzie miała żadnego wpływu w tym konkretnym przypadku:
Jeśli :polecenie nie powiedzie się, w tym z powodu nieudanego przekierowania, spowoduje to zamknięcie powłoki. W praktyce prawdopodobnie nie będzie to miało znaczenia, chyba że przekażesz przekierowania do:
$ sh -c ': > / ; echo HERE'
sh: 1: cannot create /: Is a directory
$ sh -c 'true > /; echo HERE'
sh: 1: cannot create /: Is a directory
HERE
w var=value :, varpozostaje ustawiony na valuepo :powrocie, nie w przypadku true:
$ var=1; var=2 : ; echo "$var"
2
$ var=1; var=2 true; echo "$var"
1
Zauważ też, że || truedziała w powłokach rci cshrodzin, ale nie || :(ale nie w celu anulowania set -ew csh).
|| :to nie to samo co :. Oznacza to lub działa w :inny sposób (to znaczy, jeśli poprzedni potok się nie powiedzie).
set -e
false
Spowodowałoby muszlę do zjazdu powodu set -ei falsema niezerową (awaria) stan wyjścia. set -eEfekt jest anulowana, jeśli polecenie, które zwraca kod wyjścia niż zero jest używany jako warunku jak w:
if false; then ...
while false; do ...
false && : ...
false || : ...
false && :tylko anuluje set -e. false || :anuluje set -ei ustawia status wyjścia na 0tak, więc bardziej idiomatyczne jest stwierdzenie, że chcemy zignorować kod wyjścia błędu polecenia. Większość twierdzi, że || truejest to bardziej czytelne (wyraźniej oddaje intencję).
||:(bez spacji) obowiązuje również w bash. Robi to samo co|| :lub|| true.