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это более разборчиво (передает намерение более четко).
||:(без пробела) также действует в bash. Он делает то же самое, что и|| :или|| true.