Ich habe über && und || gelesen und ich möchte im falschen Fall zwei Befehle ausführen.
Ich habe es versucht, ;
aber das läuft immer . Ich habe versucht, es in geschweifte Klammern zu setzen, { command1; command2 }
aber das führt zu einem Syntaxfehler.
Ich möchte so etwas tun
command && echo "Ok, continuing" || echo "Check internet connection"; exit 1
Dies wird nur beendet, wenn keine Internetverbindung besteht.
command-line
bash
Thomas Weller
quelle
quelle
()
und{}
.Antworten:
Durch die Verwendung von Parens werden die Befehle in eine Unterschale eingefügt, die nicht immer Ihren Wünschen entspricht. Alternativ können Sie geschweifte Klammern verwenden:
Der Trick dabei ist, dass im Gegensatz zu Parens dem letzten Befehl in geschweiften Klammern gefolgt werden muss
;
.Warum ein Semikolon oder eine neue Zeile erforderlich ist
Eine geschweifte Klammer ist ein gültiges Argument für einen Befehl. Hier ist zum Beispiel eine geschweifte Klammer als Argument für
echo
:Folglich, wenn die Shell sieht:
Die Shell interpretiert Befehl1 als ohne Argumente und Befehl2 als ein Argument, das aus dem Zeichen besteht
}
. Eine geschweifte Klammer}
wird nur dann als Schließen einer Gruppierung interpretiert, wenn sie einem Semikolon oder einer neuen Zeile folgt. Damit das oben genannte funktioniert:Unterschalen und der Unterschied zwischen
{...}
und(...)
Beachten Sie, dass Folgendes
x
auf 10 gesetzt ist, diese Einstellung jedoch vergessen wird, bevor derecho
Befehl ausgeführt wird:Bei geschweiften Klammern hingegen wird an die Einstellung von
x=10
erinnert:Der Unterschied besteht darin, dass Variablenzuweisungen in einer Unterschale nach Abschluss der Unterschale nicht überleben.
Dokumentation
Von
man bash
:quelle