Introdução.
- Se entender alguns operadores de controle em shell, matará a questão. Nota: os dois mais chatos são: && e ||. Contudo, sem stress. Vamos ver abaixo.
& = deixa em segundo plano;
&& = só é executado se o comando à esquerda for verdadeiro, ou seja. 0;
II = só é executado se o comando à esquerda for falso, ou seja, 1, por exemplo;
; = execução independente, ou seja, um programa por vez <- Já já entro em detalhes, mas olhe a letra E (kkk).
- Talvez se pergunte: "Fabiano, agora confundiu minha cabeça, pois nunca vi 0 ser verdadeiro e 1 ser falso!!!!!" Meu guerreiro(a), eu também fiquei na mesma, até que pesquisando, descobri o porquê.
- O && e || não são testes lógicos, e sim programas armazenados no /bin/bash. Alguns programas fazem isso, pois quando dá algum erro preciso saber o que aconteceu e quando é bem-sucedido, não preciso saber, por isso 0 (famosa frase: "Compilou?! Bola pra frente" kkkkkkk).
Aplicação:
"A" e "B" ERRADAS. Por quê? R.: prog1 && echo 1 <- não será executado em segundo plano, mas sim será executado se o progr1 for bem-sucedido (0).
"C" ERRADA. Por quê? R.: prog2 || echo 2 <- vimos que é o contrário, somente será executado se retornar diferente de zero.
prog3 ; echo 3 <- o echo 3 será executado independente do retorno. Com isso, a D está errada e a letra E está correta.
Referências:
Por que 0 é verdadeiro, mas falso é 1 no shell? https://qastack.com.br/programming/2933843/why-0-is-true-but-false-is-1-in-the-shell
Confusing use of && and || operators https://unix.stackexchange.com/questions/24684/confusing-use-of-and-operators