He visto mucho este constructo en los scripts y lo usé yo mismo, pero me molesta que parezca que no puedo encontrarlo en la documentación.
Ejemplo:
[ -f file1 ] &&
[ -f file2 ] &&
echo "Both files exist." ||
echo "One or the other file doesn't exist."
Esto también se podría hacer con barras invertidas antes de las nuevas líneas, como se menciona en 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).
Ejemplo:
[ -f file1 ] && \
[ -f file2 ] && \
echo "Both files exist." || \
echo "One or the other file doesn't exist."
... pero esto no parece ser necesario. La primera versión anterior funciona incluso sin las barras invertidas.
¿Dónde puedo encontrar esto man bash
? (Además, ¿es esto bash
específico o compatible con POSIX?)
bash
shell-script
Comodín
fuente
fuente
;
,&
,(
y)
.names=( Rama Soma<newline> Sita Diya )
. Python los describe claramente aquí, pero la documentación de Bash no parece.Respuestas:
Una nueva línea se ignora en algunos contextos donde hay un comando manifiestamente no terminado. Estos contextos incluyen después de un operador de control (
&&
,||
,|
,&
,;
,;;
, pero no!
).No veo esto documentado en el manual de bash.
En POSIX, se especifica a través de las reglas gramaticales . Dondequiera que tengan las reglas
linebreak
, puede tener cero o más saltos de línea.fuente
|
al comienzo de la siguiente línea? Recuerde, el shell también se usa de forma interactiva, no solo en scripts, y la gramática es la misma.this && this2 && that
está bien, pero para unaelse
cláusula usaría un realif then else fi
.)