bash – Uso confuso de && y || operadores

Pregunta:

Estaba hojeando un archivo /etc/rc.d/init.d/sendmail (sé que casi nunca se usa, pero estoy estudiando para un examen), y estoy un poco confundido acerca de && y el || operadores. Leí dónde se pueden usar en declaraciones como:

if [ test1 ] && [ test2 ]; then
     echo "both tests are true"
elif [ test1 ] || [ test2 ]; then
     echo "one test is true"
fi

Sin embargo, este script muestra declaraciones de una sola línea como:

[ -z "$SMQUEUE" ] && SMQUEUE="QUEUE"
[ -f /usr/sbin/sendmail ] || exit 0

Estos parecen estar usando && y || operadores para obtener respuestas basadas en pruebas, pero no he podido desenterrar documentación sobre este uso particular de estos operadores. ¿Alguien puede explicar qué hacen estos en este contexto particular?

Respuesta:

El lado derecho de && solo se evaluará si el estado de salida del lado izquierdo es cero (es decir, verdadero). || es lo contrario: evaluará el lado derecho solo si el estado de salida del lado izquierdo es distinto de cero (es decir, falso).

Puede considerar [ ... ] un programa con un valor de retorno. Si la prueba interna se evalúa como verdadera, devuelve cero; devuelve distinto de cero en caso contrario.

Ejemplos:

$ false && echo howdy!

$ true && echo howdy!
howdy!
$ true || echo howdy!

$ false || echo howdy!
howdy!

Notas adicionales:

Si hace which [ , es posible que vea que [ realidad apunta a un programa! Sin embargo, generalmente no es el que se ejecuta en scripts; run type [ para ver qué se ejecuta realmente. Si desea intentar usar el programa, simplemente proporcione la ruta completa así: /bin/[ 1 = 1 .

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım