true
no 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 true
es 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 :
, var
permanece establecido value
despué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 || true
trabajos en los depósitos de la rc
y csh
las familias, pero no || :
(pero no cancelar set -e
en 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 -e
y false
tiene un estado de salida no cero (fallo). El set -e
efecto 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 -e
y establece el estado de salida de 0
modo 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 || true
es 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
.