wiersz poleceń - do czego służy &&?
W skorupce, kiedy widzisz
$ command one && command two
celem jest wykonanie polecenia następującego po tym, &&tylko jeśli pierwsze polecenie zakończy się powodzeniem. Jest to idiomatyczne dla pocisków Posix i nie tylko w Bash.
Ma to na celu zapobieganie uruchomieniu drugiego procesu, jeśli pierwszy się nie powiedzie.
Możesz zauważyć, że użyłem słowa „zamiar” - to nie bez powodu. Nie wszystkie programy zachowują się tak samo, więc aby to zadziałało, musisz zrozumieć, co program uważa za „awarię” i jak sobie z tym poradzić, czytając dokumentację i, w razie potrzeby, kod źródłowy.
Twoja powłoka przyjmuje wartość zwracaną 0 dla wartości true, a inne liczby dodatnie dla wartości false
Programy zwracają sygnał przy wychodzeniu. Powinny zwrócić 0, jeśli zakończą się pomyślnie, lub większą od zera, jeśli nie. Umożliwia to ograniczoną komunikację między procesami.
&&Się dalej AND_IFw gramatyki POSIX powłoki , która jest częścią and_orlisty rozkazów, które należą również ||która jest OR_IFo podobnej semantyki.
Symbole gramatyczne cytowane z dokumentacji:
%token AND_IF OR_IF DSEMI
/* '&&' '||' ';;' */
I gramatyka (cytowana również z dokumentacji), która pokazuje, że dowolną liczbę AND_IFs ( &&) i / lub OR_IFs ( ||) można łączyć razem (zgodnie z and_ordefinicją rekurencyjną):
and_or : pipeline
| and_or AND_IF linebreak pipeline
| and_or OR_IF linebreak pipeline
Oba operatory mają jednakowe pierwszeństwo i są oceniane od lewej do prawej (są one skojarzone). Jak mówią doktorzy:
AND-ORLista sekwencji jednej lub więcej rur, oddzielonych przez operatorów "&&"i "||".
Lista jest sekwencja z jednego lub więcej i, lub listy oddzielone przez operatorów ';'i '&'ewentualnie zakończone ';', '&'lub.
Operatorzy "&&"i "||"mają równy priorytet i będą oceniani z pozostawionym skojarzeniem. Na przykład oba poniższe polecenia zapisują wyłącznie pasek na standardowe wyjście:
$ false && echo foo || echo bar
$ true || echo foo && echo bar
W pierwszym przypadku false to polecenie kończące się ze statusem 1
$ false
$ echo $?
1
co oznacza, echo fooże nie działa (tj. zwarcie echo foo). Następnie polecenie echo barjest wykonywane.
W drugim przypadku true kończy działanie z kodem 0
$ true
$ echo $?
0
i dlatego echo foonie jest wykonywany, a następnie echo barwykonywany.
false && echo "Will not be printed".