¿Cuáles son las ventajas y desventajas de usar && o || versus si / elif / else?


0

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


También relacionado: ¿ Cuándo es 'si' no es necesario?
Scott

Respuestas:


5

Las dos formas que presentas no son exactamente iguales.

En la forma: A && B || C, Cserá ejecutado si cualquiera Ao Bevalúan como falso.

Por ejemplo:

$ true && true || echo C
$ true && false || echo C
C
$

Esto ofrece una ventaja real del if-then-elseformulario sobre el A && B || Cformulario y es la claridad. Es más claro lo que if-then-elseestá haciendo el formulario, pero debe comprender las reglas de evaluación para comprender lo que A && B || Cestá haciendo el formulario.

Sin embargo, a menudo puede ser beneficioso usar A && Bo A || 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.


44
OMI lo más confusa acerca del uso && ||en lugar de if then elsees 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 un echocomando falle, pero puede suceder, y será realmente muy confuso si alguna vez lo hace. Una if then elsedeclaración adecuada ejecuta los thencomandos o los elsecomandos, nunca ambos.
Gordon Davisson

@GordonDavisson: ¿Por qué no publicas eso como respuesta?
Scott

@Scott: Considero que la respuesta de Camh es completamente correcta, solo estoy señalando una consecuencia particularmente preocupante.
Gordon Davisson
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.