Bash / sh - różnica między && a;


136

Zwykle używam ;do łączenia więcej niż jednego polecenia w linii, ale niektórzy wolą &&. Czy jest jakaś różnica? Na przykład cd ~; cd -i cd ~ && cd -wydaje się, że robi to samo. Która wersja jest bardziej przenośna, np. Będzie obsługiwana przez podzbiór bash, taki jak powłoka Androida lub coś podobnego?

Odpowiedzi:


193

Jeśli poprzednie polecenie zawiodło, ;drugie zostanie uruchomione.

Ale z &&drugim nie będzie działać.

Jest to „leniwy” logiczny operand „AND” między operacjami.


2
Innymi słowy, ma zachowanie zwarcia
peterchaula

@peter Który? ;Jeden lub &&jeden? Czy masz na myśli oba?
Shayan

@Shayan, the &&.
peterchaula

57

Używam &&ponieważ dawno temu na pobliskim komputerze:

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

ale nie pomogło ...;)

cd /tnp/test && rm -rf * jest bezpieczny... ;)


26
Aby być bezpieczniejszym, rm -rf /tnp/test
użyłbym

5
Aby być jeszcze bezpieczniejszym, lepiej jest rm /tnp/test/ -rfzapobiegać śmiertelnemu kliknięciu
radrow

22

W cmd1 && cmd2, cmd2jest wykonywane tylko wtedy, gdy się cmd1powiedzie (zwraca 0).

W cmd1 ; cmd2, cmd2jest wykonywany w każdym przypadku.

Obie konstrukcje są częścią powłoki zgodnej z POSIX.


11

&&oznacza wykonanie następnej komendy, jeśli poprzednia zakończyła się ze statusem 0. W przeciwnym razie użyj ||np. do wykonania, jeśli poprzednie polecenie zakończyło się ze statusem różnym od 0, ;zawsze jest wykonywane.

Bardzo przydatne, gdy musisz wykonać określoną akcję w zależności od tego, czy poprzednie polecenie zakończyło się dobrze, czy nie.


5

Polecenia rozdzielone przez ;są wykonywane sekwencyjnie, niezależnie od ich statusu wykonania.

Z &&, drugie polecenie jest wykonywane tylko wtedy, gdy pierwsze zakończy się pomyślnie (zwraca kod zakończenia 0).

Jest to omówione na stronie podręcznika bash pod Lists. Spodziewałbym się, że każda powłoka podobna do Uniksa będzie obsługiwać oba te operatory, ale nie wiem konkretnie o powłoce Androida.



3

&&pozwala na wykonanie warunkowe, podczas gdy ;zawsze wykonywane jest drugie polecenie.

Na przykład command1 && command2, command2zostanie wykonane tylko po command1zakończeniu działania exit 0, sygnalizując, że wszystko poszło dobrze, podczas gdy w command1 ; command2drugim poleceniu zawsze zostanie wykonane bez względu na wynik command1.


1

&& jest logicznym AND w bash. Bash ma ocenę zwarciową logicznego AND. Ten idiom jest prostszym sposobem wyrażenia:


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

Natomiast ; wersja jest po prostu:


cmd1
cmd2
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.