En bash, puedo hacer que una condición de prueba utilice && y / o || en lugar de un bloque if / elif / else.
Cuando corresponde, yo uso tienden a usar && y / o || en lugar de construir un bloque if. ¿Hay alguna ventaja en el mundo real para una construcción sobre la otra?
Considere los siguientes ejemplos:
1)
[[ -f /shared_disk/backups/daily.tar.bz2 ]] && echo "the coast is clear" || echo "run the dump"
2)
if [[ -f /shared_disk/backups/daily.tar.bz2 ]]; then
echo "the coast is clear"
else
echo "run the dump"
fi
linux
bash
bash-scripting
derek_jenkins
fuente
fuente
Respuestas:
Las dos formas que presentas no son exactamente iguales.
En la forma:
A && B || C
,C
será ejecutado si cualquieraA
oB
evalúan como falso.Por ejemplo:
Esto ofrece una ventaja real del
if-then-else
formulario sobre elA && B || C
formulario y es la claridad. Es más claro lo queif-then-else
está haciendo el formulario, pero debe comprender las reglas de evaluación para comprender lo queA && B || C
está haciendo el formulario.Sin embargo, a menudo puede ser beneficioso usar
A && B
oA || B
. Eso es más claro y puede ser útil cuando se ejecutan comandos simples. A veces, una línea en lugar de tres es más clara, especialmente cuando intentas asimilar una gran cantidad de código.fuente
&& ||
en lugar deif then else
es que puede ejecutar tanto el comando entonces-como y el comando cosa similar (si el primer comando se ejecuta correctamente y la segunda falla). Realmente no esperas que unecho
comando falle, pero puede suceder, y será realmente muy confuso si alguna vez lo hace. Unaif then else
declaración adecuada ejecuta losthen
comandos o loselse
comandos, nunca ambos.