Ich habe dieses Konstrukt oft in Skripten gesehen und selbst verwendet, aber es stört mich, dass ich es anscheinend nicht in der Dokumentation finden kann.
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 erfolgen, wie in man bash
erwähnt :
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 sogar ohne die Backslashes.
Wo finde ich das in man bash
? (Außerdem ist das bash
spezifisch oder POSIX-konform?)
Akzeptierte Antwort:
Ein Zeilenumbruch wird in einigen Kontexten ignoriert, in denen offensichtlich ein nicht beendeter Befehl vorhanden ist. Diese Kontexte beinhalten nach einem Kontrolloperator (&&
, ||
, |
, &
, ;
, ;;
, aber nicht !
).
Ich sehe dies nicht im Bash-Handbuch dokumentiert.
In POSIX wird es über die Grammatikregeln angegeben. Wo immer die Regeln linebreak
haben , können Sie null oder mehr Zeilenumbrüche haben.