Ho visto spesso questo costrutto negli script e l'ho usato io stesso, ma mi dà fastidio il fatto di non riuscire a trovarlo nella documentazione.
Esempio:
[ -f file1 ] &&
[ -f file2 ] &&
echo "Both files exist." ||
echo "One or the other file doesn't exist."
Questo potrebbe anche essere fatto con le barre inverse prima delle nuove righe, come menzionato 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).
Esempio:
[ -f file1 ] &&
[ -f file2 ] &&
echo "Both files exist." ||
echo "One or the other file doesn't exist."
...ma questo non sembra essere necessario. La prima versione sopra funziona anche senza i backslash.
Dove posso trovarlo in man bash
? (Inoltre, questo è bash
specifico o conforme a POSIX?)
Risposta accettata:
Una nuova riga viene ignorata in alcuni contesti in cui è presente un comando manifestamente non terminato. Questi contesti includono dopo un operatore di controllo (&&
, ||
, |
, &
, ;
, ;;
, ma non !
).
Non vedo questo documentato nel manuale di bash.
In POSIX, è specificato tramite le regole grammaticali. Ovunque le regole abbiano linebreak
, puoi avere zero o più interruzioni di riga.