true
не було вбудовано в оболонку Борна. :
завжди був (це був спосіб вводити коментарі до того, як #
було введено).
Це, а також тому , що це коротше типу, ймовірно , головна причина , люди вважають за краще :
більше true
.
Зауважте ще одну відмінність оболонок POSIX (бо bash
лише в режимі POSIX): хоча true
це звичайний вбудований (навіть не має бути вбудований), :
це спеціальний вбудований. Це має кілька наслідків, більшість з яких навряд чи матиме вплив у цьому конкретному випадку:
Якщо :
команда не працює, в тому числі через невдале перенаправлення, це призводить до виходу оболонки. На практиці це, ймовірно, не змінить значення, якщо ви не перейдете до переадресації:
$ sh -c ': > / ; echo HERE'
sh: 1: cannot create /: Is a directory
$ sh -c 'true > /; echo HERE'
sh: 1: cannot create /: Is a directory
HERE
в var=value :
, var
залишається встановленим value
після :
повернення, а не у випадку true
:
$ var=1; var=2 : ; echo "$var"
2
$ var=1; var=2 true; echo "$var"
1
Також відзначимо , що || true
роботи в оболонках rc
і csh
сімей , але не || :
(але не скасувати set -e
в csh
).
|| :
не те саме, що :
. Це означає або працює :
іншим чином (тобто якщо попередній трубопровід вийшов з ладу).
set -e
false
Може призвести до виходу оболонки через set -e
і false
має ненульовий (пошкоджений) статус виходу. set -e
Ефект буде скасований , якщо команда , яка повертає ненульовий код виходу використовується в якості умови , як в:
if false; then ...
while false; do ...
false && : ...
false || : ...
false && :
лише скасовує set -e
. false || :
скасовує set -e
та встановлює статус виходу на 0
так, ідіоматичніше сказати, що ми хочемо ігнорувати код виходу з ладу команди. Більшість заперечує, що || true
це є більш розбірливим (чіткіше передає намір).
||:
(без місця) діє і в басі. Це робить те саме, що|| :
або|| true
.