No hago mucho script de shell, así que me sorprendí un poco cuando leí la documentacióngit submodule
y vi la sintaxis que usaban en esta documentación:
Un retorno distinto de cero del comando en cualquier submódulo hace que el procesamiento finalice. Esto se puede anular agregando
|| :
al final del comando.
Tuve que buscar que || :
era una abreviatura para obligar a un comando a salir con éxito. Cada vez que tuve que hacer que un comando salga con éxito, solía || true
. ¿Se || :
considera más idiomático?
||:
(sin espacio) también es válido en bash. Hace lo mismo que|| :
o|| true
.Respuestas:
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ástrue
.Tenga en cuenta otra diferencia en los shells POSIX (para
bash
, solo en el modo POSIX): si bientrue
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:
en
var=value :
,var
permanece establecidovalue
después de:
devoluciones, no en el caso detrue
:También tenga en cuenta que los
|| true
trabajos en los depósitos de larc
ycsh
las familias, pero no|| :
(pero no cancelarset -e
encsh
).|| :
No es lo mismo que:
. Significa o se ejecuta de:
otra manera (es decir, si falla la canalización anterior).Causaría la cáscara para salir a causa de
set -e
yfalse
tiene un estado de salida no cero (fallo). Elset -e
efecto se cancela si el comando que devuelve un estado de salida distinto de cero se usa como una condición como en:false && :
Solo cancelaset -e
.false || :
cancelaset -e
y establece el estado de salida de0
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).fuente
&& :
es brillante, ¿hay documentos o lecturas adicionales sobre esto? Google se queda corto cuando intento encontrar este tipo de palabras clave ...En general, en bash, el colon
:
ytrue
es equivalente.Creo que se basa en el contexto .
Si desea que a
return value
, o acondition
sea siempre cierto, debe usar unatrue
palabra clave, hará que su código sea más claro y les permitirá a los espectadores saber que desea enfatizar el valor verdadero , es decir:o
Y si no quieres hacer nada , o
NOP
en shell, debes usar dos puntos:
o
fuente
La mayoría de estas respuestas no abordan el uso más común de
:
.Primero, esta discusión no está relacionada con ningún shell que no sea un derivado de Bourne shell (
sh
). Dicho esto, todos los shells derivados de Bourne ventrue
y:
como la misma cosa. Se solía animar a los programadores a usarlos en:
lugar de hacerlotrue
, porque:
siempre está integrado, mientras que solía haber casos en los quetrue
no siempre estaba integrado.:
Tiene dos usos. No es sinónimo de#
, pero tiene una función diferente. Al depurar su script bajo aset -x
,#
el analizador descarta las líneas donde se usa y las ignora totalmente, mientras que las líneas con:
se analizan y evalúan. Esto es realmente útil en la depuración ya que debajo de-x
esas líneas se muestran y se muestra su valor después de la evaluación. Es como ponerprint
declaraciones en su código que solo se muestran en-x
modo. Tenga cuidado con los valores después de:
que son código real y los efectos secundarios pueden afectar su programa.fuente