Bash / sh: diferencia entre && y;


136

Normalmente suelo ;combinar más de un comando en una línea, pero algunas personas prefieren &&. ¿Hay alguna diferencia? Por ejemplo, cd ~; cd -y cd ~ && cd -parece hacer lo mismo. ¿Qué versión es más portátil, por ejemplo, será compatible con un subconjunto bash como el shell de Android o algo así?

Respuestas:


193

Si el comando anterior falló, ;se ejecutará el segundo.

Pero con &&el segundo no se ejecutará.

Este es un "flojo" lógico "Y" operando entre operaciones.


2
En otras palabras, tiene un comportamiento de cortocircuito
peterchaula

@peter ¿Cuál? ¿El ;uno o el &&uno? ¿O te refieres a ambos?
Shayan

@Shayan, el &&.
Peterchaula

57

Estoy usando &&porque hace mucho tiempo en la computadora cercana:

root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...   
^C

pero no ayudó ...;)

cd /tnp/test && rm -rf * es seguro... ;)


26
Para estar más seguro, usaríarm -rf /tnp/test
melvynkim

55
Para estar aún más seguro, es mejor usarlo rm /tnp/test/ -rfpara evitar el ingreso mortal de clics erróneos
radrow

22

En cmd1 && cmd2, cmd2solo se ejecuta si cmd1tiene éxito (devuelve 0).

En cmd1 ; cmd2, cmd2se ejecuta en cualquier caso.

Ambas construcciones son parte de un shell compatible con POSIX.


11

&&significa ejecutar el siguiente comando si el anterior salió con el estado 0. Para lo contrario, use, por ||ejemplo, para ejecutarse si el comando anterior sale con un estado que no es igual a 0, ;siempre se ejecuta.

Muy útil cuando necesita realizar una acción en particular dependiendo de si el comando anterior terminó bien o no.


5

Los comandos separados por ;se ejecutan secuencialmente independientemente de su estado de finalización.

Con &&, el segundo comando se ejecuta solo si el primero se completa con éxito (devuelve el estado de salida de 0).

Esto está cubierto en la página de manual de bash debajo Lists. Esperaría que cualquier shell similar a Unix admita ambos operadores, pero no sé específicamente sobre el shell de Android.


2
Aquí hay un enlace al manual de bash: gnu.org/software/bash/manual/bashref.html#Lists
glenn jackman

3

&&permite la ejecución condicional mientras ;siempre se ejecuta el segundo comando.

En p command1 && command2. Ej. , command2Solo se ejecutará cuando command1haya terminado con exit 0, señalizando que todo salió bien, mientras que en command1 ; command2el segundo comando siempre se ejecutará sin importar el resultado command1.


1

&& es lógico Y en bash. Bash tiene una evaluación de cortocircuito de AND lógico. Este modismo es una forma más simple de expresar lo siguiente:


cmd1;rc=$?
if [ $rc -eq 0 ]; then
   cmd2
fi

Mientras que el ; la versión es simplemente:


cmd1
cmd2
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.