Onde estão as continuações da linha de bash depois de && e || documentado?

22

Eu vi esse constructo em scripts muito e usei-o, mas me incomoda que eu não consigo 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, como 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 em man bash ? (Além disso, este é bash específico ou compatível com POSIX?)

    
por Wildcard 06.01.2016 / 00:55

1 resposta

33

Uma nova linha é ignorada em alguns contextos onde há manifestamente um comando não terminado. Esses contextos incluem após um operador de controle ( && , || , | , & , ; , ;; , mas não ! ).

Não vejo isso documentado no manual bash.

No POSIX, ele é especificado por meio das regras gramaticais . Onde quer que as regras tenham linebreak , você pode ter zero ou mais quebras de linha.

    
por 06.01.2016 / 01:08