Was ;
bedeutet in einzeiligen Skripten wie diesem:
while true; do sudo -n true; sleep 60; kill -0 '$$' || exit; done 2>/dev/null &
Bedeutet es „neue Zeile“ oder „nächster Befehl“?
Antwort1
Es ist ein Befehlstrennzeichen. Zunächst ist es jedoch vielleicht besser, es als Ende der while
Anweisung zu betrachten.
Wenn Sie beispielsweise eine Schleife ausführen möchten, während ein Befehl erfolgreich ist, würden Sie etwas wie
while test -f /foo; do some_command; done`
Das Semikolon wird verwendet, um das Ende der Argumente für anzuzeigen test
. Andernfalls würde das System denken, dass es do
sich um ein weiteres Argument für handelt test
.
Sie können jedoch anstelle des Semikolons Zeilenumbrüche verwenden. Das Folgende entspricht genau dem obigen Beispiel, nur ohne Semikolons
while test -f /foo
do
some_command
done
Tatsächlich ist es so: Wenn Sie mit Bash den obigen Befehl ausführen und nach dessen Abschluss (oder wenn Sie ihn mit STRG+C drücken) im Verlauf zurückgehen (mit den Aufwärtspfeiltasten oder so), werden Sie feststellen, dass der mehrzeilige Befehl durch einen Befehl mit Semikolons ersetzt wird.
Also ja, die Syntax für Dinge wie if
und while
unterbricht das normale Shell-Verhalten.
Ich persönlich fand die Syntax immer seltsam, da sie do
seltsam aussieht. Aber man gewöhnt sich daran.