Bash / sh - differenza tra && e;


136

Normalmente uso ;per combinare più di un comando in una riga, ma alcune persone preferiscono &&. C'è qualche differenza? Ad esempio, cd ~; cd -e cd ~ && cd -sembra fare la stessa cosa. Quale versione è più portatile, ad esempio sarà supportata da un sottogruppo bash come la shell di Android o giù di lì?

Risposte:


193

Se il comando precedente non è riuscito con ;il secondo verrà eseguito.

Ma con &&il secondo non funzionerà.

Questo è un operando "AND" logico "pigro" tra le operazioni.


2
In altre parole, ha un comportamento in corto circuito
peterchaula il

@peter Quale? L' ;uno o l' &&uno? O intendi entrambi?
Shayan,

@Shayan, the &&.
peterchaula,

57

Sto usando &&perché molto tempo fa sul computer vicino:

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

ma non aiutato ...;)

cd /tnp/test && rm -rf * è salvo... ;)


26
Per essere più sicuro, rm -rf /tnp/test
userei

5
Per essere ancora più sicuri, è meglio usare rm /tnp/test/ -rfper evitare di entrare in missclick
radrow

22

In cmd1 && cmd2, cmd2viene eseguito solo se cmd1riesce (restituisce 0).

In cmd1 ; cmd2, cmd2viene eseguito in ogni caso.

Entrambi i costrutti fanno parte di una shell conforme a POSIX.


11

&&significa eseguire il comando successivo se il precedente è uscito con lo stato 0. Per il contrario, utilizzare ||ie per essere eseguito se il comando precedente esce con uno stato non uguale a 0, ;viene sempre eseguito.

Molto utile quando è necessario eseguire un'azione specifica a seconda che il comando precedente sia terminato correttamente o meno.


5

I comandi separati da ;vengono eseguiti in sequenza indipendentemente dal loro stato di completamento.

Con &&, il secondo comando viene eseguito solo se il primo viene completato correttamente (restituisce lo stato di uscita pari a 0).

Questo è trattato nella manpage di bash sotto Lists. Mi aspetterei che qualsiasi shell simile a Unix supporti entrambi questi operatori, ma non conosco specificamente la shell Android.



3

&&consente l'esecuzione condizionale mentre è ;sempre in esecuzione il secondo comando.

Ad esempio command1 && command2, command2verrà eseguito solo quando command1è terminato exit 0, segnalando che tutto è andato bene, mentre nel command1 ; command2secondo comando verrà sempre eseguito indipendentemente dal risultato command1.


1

&& è logico AND in bash. Bash ha una valutazione di corto circuito dell'AND logico. Questo linguaggio è un modo più semplice di esprimere quanto segue:


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

Mentre il ; la versione è semplicemente:


cmd1
cmd2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.