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?
bash
shell
syntax
multiplatform
psihodelia
źródło
źródło
;
Jeden lub&&
jeden? Czy masz na myśli oba?&&
.Używam
&&
ponieważ dawno temu na pobliskim komputerze:ale nie pomogło ...;)
cd /tnp/test && rm -rf *
jest bezpieczny... ;)źródło
rm -rf /tnp/test
rm /tnp/test/ -rf
zapobiegać śmiertelnemu kliknięciuW
cmd1 && cmd2
,cmd2
jest wykonywane tylko wtedy, gdy sięcmd1
powiedzie (zwraca 0).W
cmd1 ; cmd2
,cmd2
jest wykonywany w każdym przypadku.Obie konstrukcje są częścią powłoki zgodnej z POSIX.
źródło
&&
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.
źródło
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.źródło
&&
pozwala na wykonanie warunkowe, podczas gdy;
zawsze wykonywane jest drugie polecenie.Na przykład
command1 && command2
,command2
zostanie wykonane tylko pocommand1
zakończeniu działaniaexit 0
, sygnalizując, że wszystko poszło dobrze, podczas gdy wcommand1 ; command2
drugim poleceniu zawsze zostanie wykonane bez względu na wynikcommand1
.źródło
&& jest logicznym AND w bash. Bash ma ocenę zwarciową logicznego AND. Ten idiom jest prostszym sposobem wyrażenia:
Natomiast ; wersja jest po prostu:
źródło