Welchen Nutzen hat ; in einem einzeiligen Befehl?

Welchen Nutzen hat ; in einem einzeiligen Befehl?

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 whileAnweisung 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 dosich 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 ifund whileunterbricht das normale Shell-Verhalten.
Ich persönlich fand die Syntax immer seltsam, da sie doseltsam aussieht. Aber man gewöhnt sich daran.

verwandte Informationen