Con respecto al tema fuera de tema, la última vez que lo verifiqué, bash seguía siendo un lenguaje de programación, pero antes estaba equivocado y podría ser un caramelo de frutos secos.
Steve K
Lo es, y si estuviera haciendo una pregunta sobre un comportamiento específico o la forma correcta de hacer una determinada cosa, sin duda estaría en el tema. Esto cae en una categoría más gris de "pregunta sobre la sintaxis de un lenguaje" que no es tan claramente una pregunta de "programación" en lo que a mí respecta.
Etan Reisner
4
bash es en cierto modo seco y en cierto modo dulce. Al final del día es bastante agradable y digerible. Sin embargo, no se puede robar fácilmente a los bebés.
code_monk
Respuestas:
138
El &&operador es un operador AND booleano: si el lado izquierdo devuelve un estado de salida distinto de cero, el operador devuelve ese estado y no evalúa el lado derecho (cortocircuita), de lo contrario evalúa el lado derecho y devuelve su estado de salida . Esto se usa comúnmente para asegurarse de que command2solo se ejecute si se command1ejecuta correctamente.
El ;token solo separa los comandos, por lo que ejecutará el segundo comando independientemente de si el primero tiene éxito o no.
¿Es el doble ampersand &&diferente de un simple ampersand &en bash?
Charlie Parker
16
@CharlieParker &hace que el comando se ejecute en segundo plano, así que sí. "Ejecutar esto en segundo plano" es muy diferente de "ejecutar este siguiente comando sólo si este otro tiene éxito".
cdhowie
El comando2 solo ejecutará el comando1 devolvió el estado de salida cero , lo que significa que terminó con éxito ..
Nik
33
comando1 && comando2
command1 && command2se ejecuta command2si (y solo si) la command1ejecución finaliza correctamente. En la jerga de Unix, eso significa código de salida / código de retorno igual a cero.
comando1; comando2
command1; command2se ejecuta command2después de ejecutar command1, secuencialmente. No importa si los comandos tuvieron éxito o no.
La primera es una lógica simple que ANDusa evaluación de cortocircuito, la última simplemente delimita dos comandos.
Lo que sucede en real es que cuando el primer programa devuelve un código de salida distinto de cero, el conjunto ANDse evalúa FALSEy el segundo comando no se ejecutará. El último simplemente los ejecuta a ambos en orden.
Respuestas:
El
&&
operador es un operador AND booleano: si el lado izquierdo devuelve un estado de salida distinto de cero, el operador devuelve ese estado y no evalúa el lado derecho (cortocircuita), de lo contrario evalúa el lado derecho y devuelve su estado de salida . Esto se usa comúnmente para asegurarse de quecommand2
solo se ejecute si secommand1
ejecuta correctamente.El
;
token solo separa los comandos, por lo que ejecutará el segundo comando independientemente de si el primero tiene éxito o no.fuente
&&
diferente de un simple ampersand&
en bash?&
hace que el comando se ejecute en segundo plano, así que sí. "Ejecutar esto en segundo plano" es muy diferente de "ejecutar este siguiente comando sólo si este otro tiene éxito".comando1 && comando2
command1 && command2
se ejecutacommand2
si (y solo si) lacommand1
ejecución finaliza correctamente. En la jerga de Unix, eso significa código de salida / código de retorno igual a cero.comando1; comando2
command1; command2
se ejecutacommand2
después de ejecutarcommand1
, secuencialmente. No importa si los comandos tuvieron éxito o no.fuente
La primera es una lógica simple que
AND
usa evaluación de cortocircuito, la última simplemente delimita dos comandos.Lo que sucede en real es que cuando el primer programa devuelve un código de salida distinto de cero, el conjunto
AND
se evalúaFALSE
y el segundo comando no se ejecutará. El último simplemente los ejecuta a ambos en orden.fuente