Co oznaczają „ &&
”, „ \
” i „ -
” na końcu poleceń bash?
W szczególności natrafiłem na następującą kombinację wierszy, które mają dodawać klucze publiczne do menedżera pakietów apt Ubuntu, do czego służą te znaki?
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \ gpg --export --armor 26C2E075 | sudo apt-key add - && \ sudo apt-get update
Odpowiedzi:
„&&” służy do łączenia ze sobą poleceń, dzięki czemu następne polecenie jest uruchamiane tylko wtedy, gdy poprzednie polecenie zakończyło się bez błędów (lub, dokładniej, zakończyło z kodem powrotu 0).
Sam „\” na końcu linii jest sposobem łączenia linii razem. Więc następujące dwie linie:
są przetwarzane dokładnie tak samo, jakby linia została zapisana jako pojedyncza linia:
„-” to argument wiersza poleceń bez określonej funkcji bash. Dokładny sposób obsługi zależy od uruchomionego polecenia (w tym przypadku apt-key ). W zależności od kontekstu jest zwykle używany do wskazania „ odczytaj dane ze standardowego wejścia zamiast z pliku ” lub „ przetworz resztę wiersza jako dane, a nie jako argumenty wiersza poleceń ”.
źródło
źródło
&& jest logicznym AND:
&& jest sposobem wyrażenia Logicznego AND , co oznacza, że całe wyrażenie jest Prawdą tylko wtedy, gdy obie strony są prawdziwe. W logice mówi się, że cała instrukcja (P&Q) jest prawdziwa tylko wtedy, gdy zarówno P, jak i Q są prawdziwe.
W rezultacie komputery zazwyczaj traktują P&Q jako ocenę zwarcia . A zatem, ponieważ cała instrukcja będzie Prawdą tylko wtedy, gdy Zarówno P, jak i Q są prawdziwe, to jeśli P jest fałszem, instrukcja Q nie jest oceniana . Zasadniczo komputery są leniwe (wydajne) i nie zawracają sobie głowy oceną Q, jeśli też nie mają. Dotyczy to również logicznej OR, patrz poprzedni link.
Trzy konteksty && w Bash:
1) Korzystanie z oceny zwarć ze statusem wyjścia polecenia:
Każde polecenie ma status wyjścia. Jeśli polecenie ma błąd, ma niezerowy status wyjścia. Więc jeśli status wyjścia jest niezerowy, a && jest używany do łączenia poleceń w instrukcję, późniejsze polecenia nie będą oceniane (wykonywane), jeśli wcześniejsze nie miały statusu wyjścia 0 (Prawda). Wynika to z oceny zwarcia. Więc jeśli masz:
Q nie zostanie wykonane, jeśli P nie jest prawdą (jeśli P wyjdzie ze statusem o wartości innej niż 0, to nie jest prawda). Tak samo jak:
make nie zostanie wykonane, jeśli config miał błąd, nie było prawdą. Zasadniczo jest to sposób na napisanie instrukcji if, jeśli:
Należy pamiętać, że w większości kontekstów 0 jest fałszem, ale nie dotyczy statusu wyjścia.
2) && Można używać we wbudowanym poleceniu testowym Bash [[]]:
&& Może być również używany wewnątrz wbudowanego polecenia testowego w bash [[]] do łączenia wyrażeń w podobny sposób jak łączenie poleceń. Cała operacja testowa będzie prawdziwa tylko wtedy, gdy oba operandy (strony) && są prawdziwe, na przykład:
można by powiedzieć, że $ a jest liczbą całkowitą między 2 a 5 (nie licząc 2 i 5).
3) Ocena arytmetyczna:
Wreszcie, && można wykorzystać w ocenie arytmetycznej jako Logiczne AND. Jeśli obie (logiczne AND) poniższych liczb są niezerowe, zwraca 0, w przeciwnym razie zwracane jest 1:
źródło
if [./configure]
przykładzie powinieneś usunąć nawiasy. Prawidłowe jestif ./configure; then make...
Myślę, że lepiej ci będzie z wyjaśnieniem „prawdziwego” znaczenia, implikacje to inna sprawa :)
\
jest „ znakiem ucieczki ” i jest jednym z trzech mechanizmów cytowania dostępnych w bash: Oznacza to, że jeśli umieścisz znak zmiany znaczenia („\”) na samym końcu linii, w rzeczywistości unikasz nowego znaku linii, który bezpośrednio po nim (znak RETURN) ma efekt „kontynuuj linię” inni wyjaśnili już w swojej odpowiedziMoje 2 centy
źródło