&& es el AND lógico:
&& es una forma de expresar AND lógico , lo que significa que toda la expresión es True solo si ambos lados son verdaderos. En lógica, se dice que toda la declaración (P&Q) solo es verdadera cuando tanto P como Q son verdaderas.
Como consecuencia de esto, las computadoras generalmente tratan a P&Q como una evaluación de cortocircuito . Entonces, dado que toda la declaración solo será Verdadera si P y Q son verdaderas, entonces si P es falsa, la declaración Q no se evalúa . Básicamente, las computadoras son perezosas (eficientes) y no se molestan en evaluar Q si no lo tienen también. Esto también es cierto para el OR lógico, consulte el enlace anterior.
Los tres contextos de && en Bash:
1) Uso de la evaluación de cortocircuito con el estado de salida de un comando:
cada comando tiene un estado de salida. Si un comando tiene un error, tiene un estado de salida que no es cero. Entonces, si el estado de salida no es cero y && se usa para encadenar comandos en una declaración, los comandos posteriores no se evaluarán (ejecutarán) si el anterior no tenía un estado de salida de 0 (Verdadero). Esto se debe a la evaluación de cortocircuito. Entonces si tienes:
P && Q
Q no se ejecutará si P no es verdadero (si P sale con un estado que no sea 0, no es cierto). Igual que:
./configure && make
make no se ejecutará si configure tuvo un error, no era cierto. Entonces, básicamente, termina siendo una forma de escribir en la declaración if if:
if ./configure ; then
make
fi
Tenga en cuenta que, en la mayoría de los contextos, 0 es falso, pero no cuando se trata de un estado de salida.
2) && se puede usar en el comando de prueba integrado [[]] de Bash:
&& también se puede usar dentro del comando de prueba incorporado en bash [[]] para combinar expresiones de manera similar a la combinación de comandos. Toda la operación de prueba solo será verdadera si ambos operandos (lados) de && son verdaderos, por ejemplo:
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
sería una forma de decir si $ a es un número entero entre 2 y 5 (sin incluir 2 y 5).
3) Evaluación aritmética:
Por último, && se puede usar en la evaluación aritmética como AND lógico. Si los dos (lógicos Y) de los siguientes números no son cero, devuelve 0, de lo contrario se devuelve 1:
kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0