script misuse exitcode codes code builtins according bash shell syntax multiplatform

misuse - Bash/sh-diferencia entre && y;



exitcode (7)

&& es lógico Y en bash. Bash tiene una evaluación de cortocircuito de Y lógico. Este idioma 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

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


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 se trata en la página de manual de bash en Lists . Esperaría que cualquier shell tipo Unix sea compatible con estos dos operadores, pero no sé específicamente sobre el shell de Android.


En cmd1 && cmd2 , cmd2 solo se ejecuta si cmd1 tiene éxito (devuelve 0).

En cmd1 ; cmd2 cmd1 ; cmd2 , cmd2 se ejecuta en cualquier caso.

Ambas construcciones son parte de un shell que cumple con POSIX.


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 ...;)


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

Pero con && el segundo no se ejecutará.

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


&& permite la ejecución condicional while ; siempre tiene el segundo comando ejecutándose.

En, por ejemplo, command1 && command2 , command2 solo se ejecutará cuando command1 haya terminado con exit 0 , la señalización todo salió bien, mientras que en command1 ; command2 command1 ; command2 el segundo comando siempre se ejecutará sin importar el resultado de command1 .


&& significa ejecutar el siguiente comando si el anterior salió con el estado 0. Por el contrario, use || es decir, que se ejecutará si el comando anterior sale con un estado no igual a 0 ; ejecuta siempre.

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