Quais são os passos deste comando usando; || e && [duplicado]

0

Nota: A B C são comandos .....

Por favor, diga-me qual seria o processo de etapas desses comandos, para que eu possa entender melhor a linguagem ..

A || B ; C = If A fails then run B then C?
A ; B || C = Run A then B then C if (B fails... or is it if A fails?)?

O que eu realmente procuro é algo assim (mas gostaria de entender os passos acima):

Se A falhar, então execute B, mas se A obtiver êxito, pule B e execute C, d, e, etc. (Como posso fazer isso com "||" ";" e / ou "& &" ?)

Encontrei informações deste link, mas ele mostra apenas as etapas de 2 comandos, não 3 .... link

Razão pela qual outro link não responde a essa pergunta:

So, next time if you need to chain 4 commands you'll ask a new question because the answers here only show how 3 commands work ?– don_crissti26 mins ago

No sir, because I'll understand the linguistic next step for the future :). Mostly because of this....: I was unclear if the command and switch(?) " || " in sequential order (command C in this case) was always looking at command (A) or if it was looking command (B). This is mostly because I was confused by someone saying this: A || B = Run B if A failed.. wasn't sure if the next command (C, D, etc etc) would look at A as well :) (duh is what it seems, but I don't know this language... so had to get clarity).

    
por R0tten 05.06.2015 / 22:19

2 respostas

2

A || B ; C

se A sair com um status diferente de zero, execute B. C é executado incondicionalmente

A ; B || C

execute A. Em seguida, execute B. Se B sair com um status diferente de zero, execute C

Tangencialmente, às vezes você verá A && B || C . Isso geralmente é uma forma abreviada de if A; then B; else C; fi . No entanto, há uma grande diferença:

A && B || C
  • Se A falhar, execute C
  • se A for bem-sucedido, execute B.
    • se B falhar, execute C
if A; then B; else C; fi
  • Se A falhar, execute C
  • se A for bem-sucedido, execute B.
    • se B falhar, C NÃO será executado

Uma demonstração:

$ (echo A; exit 0) && (echo B; exit 1) || (echo C; exit 2); echo $?
A
B
C
2     # <== the exit status of C

$ if (echo A; exit 0); then (echo B; exit 1); else (echo C; exit 2); fi; echo $?
A
B
1     # <== the exit status of B
    
por 05.06.2015 / 22:54
1

Um teste simples

(echo -n "hello" || echo -n "world") && echo "!"

produz "olá!"

Como alternativa (declaração A falsa)

( false || echo -n "world") && echo "!"

produz "mundo!"

Operadores OR são preguiçosos, portanto, se A for verdadeiro em (A || B), B nunca é avaliado, como Verdadeiro OU Verdadeiro == Verdadeiro e Verdadeiro OU Falso == Verdadeiro

    
por 05.06.2015 / 22:39