Was bedeuten die Zeichen ' &&
', ' \
' und ' -
' am Ende von Bash-Befehlen?
Insbesondere bin ich auf die folgende Kombination von Zeilen gestoßen, die öffentliche Schlüssel zu Ubuntus Aptitude-Paket-Manager hinzufügen sollen. Wofür werden diese Zeichen hier verwendet?
gpg --keyserver keyserver.ubuntu.com --recv 26C2E075 && \ gpg --export --armor 26C2E075 | sudo apt-key add - && \ sudo apt-get update
Antworten:
"&&" wird zum Verketten von Befehlen verwendet, sodass der nächste Befehl nur ausgeführt wird, wenn der vorherige Befehl fehlerfrei beendet wurde (oder genauer gesagt, mit einem Rückkehrcode von 0).
"\" an sich am Ende einer Zeile ist ein Mittel zum Verketten von Zeilen miteinander. Also die folgenden zwei Zeilen:
werden genauso verarbeitet, als ob die Zeile als einzelne Zeile geschrieben worden wäre:
"-" ist ein Befehlszeilenargument ohne spezielle Bash-Funktion. Wie genau damit umgegangen wird, hängt vom ausgeführten Befehl ab (in diesem Fall apt-key ). Abhängig vom Kontext wird dies normalerweise verwendet, um entweder " Daten von stdin anstatt von einer Datei zu lesen " oder " den Rest der Zeile als Daten anstatt als Befehlszeilenargumente zu verarbeiten ".
quelle
quelle
&& Ist die logische UND:
&& ist ein Weg , auszudrücken Logisches UND , der gesamte Ausdruck nur wahre Bedeutung ist , wenn beide Seiten davon wahr sind. In der Logik heißt es, dass die gesamte Aussage (P & Q) nur wahr ist, wenn sowohl P als auch Q wahr sind.
Infolgedessen behandeln Computer P & Q im Allgemeinen als Kurzschlussbewertung . Da die gesamte Aussage nur dann wahr ist, wenn sowohl P als auch Q wahr sind, wird die Aussage Q nicht ausgewertet , wenn P falsch ist . Grundsätzlich sind Computer faul (effizient) und stören sich nicht daran, Q zu bewerten, wenn sie es nicht tun. Dies gilt auch für logisches ODER, siehe den vorherigen Link.
Die drei Kontexte von && in Bash:
1) Verwenden der Kurzschlussauswertung mit dem Beendigungsstatus eines Befehls:
Jeder Befehl hat einen Beendigungsstatus. Wenn ein Befehl einen Fehler aufweist, hat er einen Beendigungsstatus ungleich Null. Wenn der Exit-Status also ungleich Null ist und Befehle mit && zu einer Anweisung verkettet werden, werden spätere Befehle nicht ausgewertet (ausgeführt), wenn der frühere keinen Exit-Status von 0 (Wahr) hatte. Dies liegt an der Kurzschlussauswertung. Also, wenn Sie haben:
Q wird nicht ausgeführt, wenn P nicht wahr ist (wenn P mit einem Status von etwas anderem als 0 beendet wird, ist dies nicht wahr). Genauso wie:
make wird nicht ausgeführt, wenn configure einen Fehler hatte, der nicht wahr ist. Im Grunde ist es dann eine Schreibweise in der if then-Anweisung:
Denken Sie daran, dass 0 in den meisten Kontexten falsch ist, aber nicht, wenn es um einen Exit-Status geht.
2) && Kann in Bashs eingebautem Testbefehl [[]] verwendet werden:
&& Kann auch innerhalb des integrierten Testbefehls in bash [[]] verwendet werden, um Ausdrücke auf ähnliche Weise wie Befehle zu kombinieren. Die gesamte Testoperation ist nur dann wahr, wenn beide Operanden (Seiten) von && wahr sind, zum Beispiel:
wäre eine Art zu sagen, wenn $ a eine ganze Zahl zwischen 2 und 5 ist (ohne 2 und 5).
3) Arithmetische Auswertung:
Schließlich kann && in der arithmetischen Auswertung als logisches UND verwendet werden. Wenn beide (logisches UND) der folgenden Zahlen ungleich Null sind, wird 0 zurückgegeben, andernfalls wird 1 zurückgegeben:
quelle
if [./configure]
Beispiel sollten Sie die Klammern entfernen. Die richtige istif ./configure; then make...
Ich denke du wirst es besser mit einer Erklärung der "wirklichen" Bedeutung, Implikationen sind eine andere Sache :)
\
ist das " Escape-Zeichen " und eines der drei in bash verfügbaren Anführungszeichen: Dies bedeutet, dass Sie, wenn Sie ein Escape-Zeichen (das "\") ganz am Ende einer Zeile einfügen, tatsächlich das unmittelbar darauf folgende neue Zeilenzeichen (das RETURN-Zeichen) maskieren und somit den Effekt haben, dass "die Zeile fortsetzen". andere haben bereits in ihrer Antwort erklärtMeine 2 Cent
quelle