Ich habe dieses Konstrukt häufig in Skripten gesehen und selbst verwendet, aber es stört mich, dass ich es nicht in der Dokumentation zu finden scheint.
Beispiel:
[ -f file1 ] &&
[ -f file2 ] &&
echo "Both files exist." ||
echo "One or the other file doesn't exist."
Dies könnte auch mit Backslashes vor den Zeilenumbrüchen geschehen, wie in man bash
:
If a \<newline> pair appears, and the backslash is not
itself quoted, the \<newline> is treated as a line continuation (that
is, it is removed from the input stream and effectively ignored).
Beispiel:
[ -f file1 ] && \
[ -f file2 ] && \
echo "Both files exist." || \
echo "One or the other file doesn't exist."
... aber das scheint nicht nötig zu sein. Die erste Version oben funktioniert auch ohne die Backslashes.
Wo finde ich das man bash
? (Ist dies auch bash
spezifisch oder POSIX-konform?)
bash
shell-script
Platzhalter
quelle
quelle
;
,&
,(
und)
.names=( Rama Soma<newline> Sita Diya )
. Python beschreibt diese hier klar , aber die Bash-Dokumentation scheint dies nicht zu tun.Antworten:
Eine neue Zeile wird in einigen Kontexten ignoriert, in denen offensichtlich ein nicht abgeschlossener Befehl vorhanden ist. Diese Kontexte umfassen , nachdem ein Steueroperator (
&&
,||
,|
,&
,;
,;;
, aber nicht!
).Ich sehe dies nicht im Bash-Handbuch dokumentiert.
In POSIX wird dies über die Grammatikregeln festgelegt . Überall dort
linebreak
, wo die Regeln gelten , können keine oder mehrere Zeilenumbrüche auftreten.quelle
|
am Anfang der nächsten Zeile erfolgen soll? Denken Sie daran, dass die Shell nicht nur in Skripten, sondern auch interaktiv verwendet wird und die Grammatik dieselbe ist.this && this2 && that
ist in Ordnung, aber für eineelse
Klausel würde ich ein tatsächliches verwendenif then else fi
.)