Peço desculpas antecipadamente se for uma pergunta duplicada. Fiz um esforço para pesquisar / verificar antes de perguntar aqui.
Estou confortável em escrever one-liners como este:
foocommand && foocommand2 && foocommand3
A ideia é que eu só quero que os comandos subseqüentes sejam executados se o anterior tiver "êxito".
Estou escrevendo um script um tanto demorado e essa linha única não é viável porque parece um enorme bloco de código confuso para todos os outros.
Quero espaçar os comandos e escrever comentários entre eles no script. Como posso fazer isso e ainda ter o equivalente de && lá?
||
e &&
(em oposição a |
ou &
) é chamado de curto-circuito. O comportamento usado com os últimos operadores é chamado de avaliação ansiosa.
a && b && c
será executado apenas b
se a
for bem-sucedido; portanto, "ele só será executado c
se b
for bem-sucedido" e "somente será executado c
se a
e b
ambos forem bem-sucedidos" são instruções equivalentes: b
não pode ser bem- a
sucedido a menos que seja bem- sucedido.
a || b && c
é mais ilustrativo.
true || false && echo hi
será exibido hi
. A especificação diz: Os operadores "&&" e "||" deve ter precedência igual e ser avaliado com associatividade à esquerda.
&&
não significa que o comando posterior será executado se o anterior um foi bem sucedida. Isso significa que o comando será executado se o resultado coletivo de todos os comandos anteriores na lista de comandos for bem-sucedido. Você pode saber disso, mas os futuros leitores podem entender mal.