J'ai beaucoup vu cette construction dans les scripts et je l'ai utilisée moi-même, mais cela me dérange de ne pas pouvoir la trouver dans la documentation.
Exemple:
[ -f file1 ] &&
[ -f file2 ] &&
echo "Both files exist." ||
echo "One or the other file doesn't exist."
Cela pourrait également être fait avec des barres obliques inverses avant les nouvelles lignes, comme mentionné dans 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).
Exemple:
[ -f file1 ] && \
[ -f file2 ] && \
echo "Both files exist." || \
echo "One or the other file doesn't exist."
... mais cela ne semble pas nécessaire. La première version ci-dessus fonctionne même sans les barres obliques inverses.
Où puis-je trouver cela man bash
? (De plus, est-ce bash
spécifique ou conforme à POSIX?)
bash
shell-script
Caractère générique
la source
la source
;
,&
,(
et)
.names=( Rama Soma<newline> Sita Diya )
. Python les décrit clairement ici, mais la documentation Bash ne semble pas le faire.Réponses:
Une nouvelle ligne est ignorée dans quelques contextes où il y a manifestement une commande non terminée. Ces contextes comprennent , après un opérateur de commande (
&&
,||
,|
,&
,;
,;;
, mais pas!
).Je ne vois pas cela documenté dans le manuel bash.
Dans POSIX, il est spécifié via les règles de grammaire . Partout où les règles ont
linebreak
, vous pouvez avoir zéro ou plusieurs sauts de ligne.la source
|
au début de la ligne suivante? N'oubliez pas, le shell est également utilisé de manière interactive, pas seulement dans les scripts, et la grammaire est la même.this && this2 && that
est très bien mais pour uneelse
clause, j'utiliserais un réelif then else fi
.)