Eu já vi esse construto em scripts e o usei muito, mas me incomoda que eu não consiga encontrá-lo na documentação.
Exemplo:
[ -f file1 ] &&
[ -f file2 ] &&
echo "Both files exist." ||
echo "One or the other file doesn't exist."
Isso também pode ser feito com barras invertidas antes das novas linhas, conforme mencionado em 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).
Exemplo:
[ -f file1 ] && \
[ -f file2 ] && \
echo "Both files exist." || \
echo "One or the other file doesn't exist."
... mas isso não parece ser necessário. A primeira versão acima funciona mesmo sem as barras invertidas.
Onde posso encontrar isso man bash
? (Além disso, isso é bash
específico ou compatível com POSIX?)
bash
shell-script
Curinga
fonte
fonte
;
,&
,(
e)
.names=( Rama Soma<newline> Sita Diya )
. O Python os descreve claramente aqui, mas a documentação do Bash não parece.Respostas:
Uma nova linha é ignorada em alguns contextos em que há manifestamente um comando não terminado. Estes contextos incluem depois de um operador de controle (
&&
,||
,|
,&
,;
,;;
, mas não!
).Não vejo isso documentado no manual do bash.
No POSIX, é especificado através das regras gramaticais . Onde quer que as regras existam
linebreak
, você pode ter zero ou mais quebras de linha.fonte
|
no início da próxima linha? Lembre-se, o shell também é usado interativamente, não apenas em scripts, e a gramática é a mesma.this && this2 && that
é bom, mas para umaelse
cláusula que eu usaria um realif then else fi
.)