trueno fue integrado en el shell Bourne. :siempre lo fue (era la forma de ingresar comentarios antes de que #se introdujera).
Eso, y porque es más corto que el tipo es probablemente la razón principal de la gente prefiere :más true.
Tenga en cuenta otra diferencia en los shells POSIX (para bash, solo en el modo POSIX): si bien truees un builtin normal (ni siquiera tiene que ser builtin), :es un builtin especial . Eso tiene algunas implicaciones, la mayoría de las cuales es poco probable que tengan algún impacto en este caso particular:
Si un :comando falla, incluso debido a una redirección fallida, eso hace que el shell salga. En la práctica, eso probablemente no hará la diferencia a menos que pase redirecciones a:
$ sh -c ': > / ; echo HERE'
sh: 1: cannot create /: Is a directory
$ sh -c 'true > /; echo HERE'
sh: 1: cannot create /: Is a directory
HERE
en var=value :, varpermanece establecido valuedespués de :devoluciones, no en el caso de true:
$ var=1; var=2 : ; echo "$var"
2
$ var=1; var=2 true; echo "$var"
1
También tenga en cuenta que los || truetrabajos en los depósitos de la rcy cshlas familias, pero no || :(pero no cancelar set -een csh).
|| :No es lo mismo que :. Significa o se ejecuta de :otra manera (es decir, si falla la canalización anterior).
set -e
false
Causaría la cáscara para salir a causa de set -ey falsetiene un estado de salida no cero (fallo). El set -eefecto se cancela si el comando que devuelve un estado de salida distinto de cero se usa como una condición como en:
if false; then ...
while false; do ...
false && : ...
false || : ...
false && :Solo cancela set -e. false || :cancela set -ey establece el estado de salida de 0modo que es más idiomático decir que queremos ignorar un código de salida de falla del comando. La mayoría argumentaría que || truees más legible (transmite la intención más claramente).
||:(sin espacio) también es válido en bash. Hace lo mismo que|| :o|| true.