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.