Pido disculpas de antemano si esta es una pregunta duplicada. Hice un esfuerzo para buscar / verificar antes de preguntar aquí.
Me siento cómodo escribiendo frases sencillas como esta:
foocommand && foocommand2 && foocommand3
La idea es que solo quiero que se ejecuten comandos posteriores si el anterior fue "exitoso".
Estoy escribiendo un guión algo largo y esta frase no es factible porque parece un gran bloque de código confuso para todos los demás.
Quiero espaciar los comandos y escribir comentarios entre ellos en el script. ¿Cómo puedo hacer esto y aún tener el equivalente de && allí?
||
y &&
(en oposición a |
o &
) se llama cortocircuito. El comportamiento utilizado con estos últimos operadores se llama evaluación entusiasta.
a && b && c
solo se ejecutará b
si a
tiene éxito, por lo que "solo se ejecuta c
si b
tiene éxito" y "solo se ejecuta c
si a
y b
ambos tienen éxito" son declaraciones equivalentes: b
no puede tener éxito a menos que tenga a
éxito.
a || b && c
es más ilustrativo.
true || false && echo hi
saldrá hi
. La especificación dice: Los operadores "&&" y "||" tendrá la misma precedencia y se evaluará con asociatividad izquierda.
&&
no significa que el comando posterior se ejecutará si el anterior se ha realizado correctamente. Significa que el comando se ejecutará si el resultado colectivo de todos los comandos anteriores en la lista de comandos es exitoso. Puede saber esto, pero los futuros lectores pueden malinterpretar.