Qual è la differenza tra e commerciale e punto e virgola in Linux Bash ?
Per esempio,
$ command1 && command2
vs
$ command1; command2
Qual è la differenza tra e commerciale e punto e virgola in Linux Bash ?
Per esempio,
$ command1 && command2
vs
$ command1; command2
Risposte:
L' &&
operatore è un operatore booleano AND: se il lato sinistro restituisce uno stato di uscita diverso da zero, l'operatore restituisce quello stato e non valuta il lato destro (va in cortocircuito), altrimenti valuta il lato destro e restituisce il suo stato di uscita . Questo è comunemente usato per assicurarsi che command2
venga eseguito solo se command1
eseguito correttamente.
Il ;
token separa solo i comandi, quindi eseguirà il secondo comando indipendentemente dal fatto che il primo abbia successo o meno.
&&
diversa da una singola e commerciale &
in bash?
&
fa sì che il comando venga eseguito in background, quindi sì. "Esegui questo comando in background" è molto diverso da "esegui questo comando successivo solo se questo altro ha esito positivo".
;
ancora attendere per il primo comando per finire?
a;b
significa "corri a
e poi corri b
". a&&b
significa "esegui a
, quindi esegui b
solo se ha a
avuto successo".
command1 && command2
viene eseguito command2
se (e solo se) l' command1
esecuzione finisce con successo. In gergo Unix, ciò significa codice di uscita / codice di ritorno uguale a zero.
command1; command2
viene eseguito command2
dopo l'esecuzione command1
, in sequenza. Non importa se i comandi hanno avuto successo o meno.
La prima è una logica semplice che AND
utilizza la valutazione del cortocircuito, la seconda delimita semplicemente due comandi.
Ciò che accade nella realtà è che quando il primo programma restituisce un codice di uscita diverso da zero, AND
viene valutato l'intero FALSE
e il secondo comando non verrà eseguito. Il secondo li esegue semplicemente entrambi in ordine.