truenão foi construído no shell Bourne. :sempre foi (era a maneira de inserir comentários antes de #ser introduzido).
Isso, e porque é mais curto para tipo é provavelmente a principal razão as pessoas preferem :mais true.
Observe outra diferença nos shells POSIX (pois bash, apenas no modo POSIX): enquanto trueé um built-in regular (nem precisa ser construído), :é um built-in especial . Isso tem algumas implicações, a maioria das quais é improvável que tenha algum impacto nesse caso específico:
Se um :comando falhar, inclusive devido a um redirecionamento com falha, isso fará com que o shell seja encerrado. Na prática, isso provavelmente não fará diferença, a menos que você passe redirecionamentos para:
$ 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 :, varpermanece definido como valueapós :retornos, não no caso de true:
$ var=1; var=2 : ; echo "$var"
2
$ var=1; var=2 true; echo "$var"
1
Além disso, note que as || trueobras em conchas do rce cshfamílias, mas não || :(mas não para cancelar set -eem csh).
|| :não é o mesmo que :. Significa ou é executado de :outra forma (ou seja, se o pipeline anterior falhar).
set -e
false
Faria com que o shell para sair por causa de set -ee falsetem um status de saída diferente de zero (falha). O set -eefeito será cancelado se o comando que retorna um status de saída diferente de zero for usado como uma condição, como em:
if false; then ...
while false; do ...
false && : ...
false || : ...
false && :somente cancela set -e. false || :cancela set -ee define o status de saída para, 0portanto, é mais idiomático dizer que queremos ignorar um código de saída com falha do comando. A maioria argumentaria que || trueé mais legível (transmite a intenção mais claramente).
||:(sem espaço) também é válido no bash. Faz a mesma coisa que|| :ou|| true.