Bash avalia os operadores lógicos de forma que && sempre tenha precedência. Então, por exemplo:
false || echo 1 && echo 2
1
2
e
true || echo 1 && echo 2
2
OK. Então, digamos que eu queira que a saída seja assim:
false || (echo 1 && echo 2)
Mas sem invocar um subshell.
A única solução que consegui pensar é esta:
false || if true; then echo 1; echo 2; fi
1
2
Existe alguma maneira mais limpa, semelhante aos parênteses em C, de agrupar comandos sem precisar invocar um subshell?
Responder1
false || { echo 1 && echo 2; }