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 && cserá executado apenas bse afor bem-sucedido; portanto, "ele só será executado cse bfor bem-sucedido" e "somente será executado cse ae bambos forem bem-sucedidos" são instruções equivalentes: bnão pode ser bem- asucedido a menos que seja bem- sucedido.
a || b && cé mais ilustrativo.
true || false && echo hiserá 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.