¿Cuál es la razón para usar && en lugar de; colocar comandos en la misma línea?


30

No siendo un experto en Linux ni en Unix, me pregunto cuál es la diferencia entre estos 2 métodos de encadenar 2 comandos en la misma línea. No veo diferencia en la salida en este ejemplo simplista

Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Esto no ha causado ningún problema. Solo tengo curiosidad.

Respuestas:


43

&&es un lógico 'y'. El primer argumento se evalúa y el segundo se evalúa solo si el primero devuelve verdadero. La razón es que "falso Y algo" siempre es falso, por lo que no es necesario evaluar el segundo argumento en este caso.

Entonces, al usarlo &&, asegúrese de que el segundo comando no se ejecute si el primero informa un error ( trueestá representado por el código de salida 0, que indica que no hubo error). En contraste, ;ejecuta ambos comandos, sin importar cuál sea el resultado del primero.

Conclusión: encadenar comandos con &&es un buen hábito. Por el contrario ;, no ejecutará comandos posteriores si algo salió mal.


¿Quieres decir que eso 0significa trueo que 0significa verdad? ¿Hay un error?
Michael Butler

1
@MichaelButler: 0significa true. He añadido una aclaración.
azimut

26

;

Ejecuta secuencialmente los comandos, sin importar el estado de salida anterior:

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command

&&

Y lógico

Ejecute el siguiente comando, pero solo si el comando anterior tuvo éxito (el estado de salida era 0):

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#

||

O lógico

Ejecute el siguiente comando, pero solo si el comando anterior falló (el estado de salida no era 0):

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command

66
Además, sh -c "exit 0"se puede reemplazar con trueen estos ejemplos y sh -c "exit 1"con false.
Flimm
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.