Linguisticamente, você pode pensar em statement1 && statement2
dizendo: "execute statement1 , e se o status de saída for 0, execute statement2 ." A outra sintaxe statement1 || statement2
por si só se traduz em "execute statement1 , e se o seu status de saída for não 0, execute statement2 ."
Esses operadores são destinados principalmente para uso em condições únicas de construções if. Mas eles também usam em outros lugares para compactar sintaxes confusas.
O ponto-e-vírgula, ;
, é apenas o separador padrão de declarações do Bash (por exemplo, permite colocar duas instruções na mesma linha e executar a segunda imediatamente após a primeira, excluindo as circunstâncias irrelevantes para essa explicação). Qualquer declaração após o ponto-e-vírgula será interpretada no o resultado (verdadeiro / falso) do valor de retorno anterior.
Se A falhar, então execute B, mas se A for bem sucedido, então execute C (Como posso fazer isso com "||" ";" e / ou "& amp; & amp;"?)
A && C || B
Vamos testar:
john@mypc:~/test$ ls
file-A.txt file-B.txt file-C.txt
john@mypc:~/test$ cat file-A.txt && cat file-C.txt || cat file-B.txt
file A content
file C content
john@mypc:~/test$ rm file-A.txt
john@mypc:~/test$ ls
file-B.txt file-C.txt
john@mypc:~/test$ cat file-A.txt && cat file-C.txt || cat file-B.txt
cat: file-A.txt: No such file or directory
file B content
john@mypc:~/test$
Como você pode ver, o conteúdo do arquivo B foi impresso apenas quando a impressão do arquivo A falhou. Antes de excluirmos o arquivo A, seu conteúdo foi impresso com êxito e somente o conteúdo do arquivo C foi impresso posteriormente.
Por outro lado, ;
símbolos são agnósticos do código de retorno anterior. Por exemplo, considerando três comandos X, Y, Z, X && Y && Z
não executará a instrução Z se Y (ou X) retornar um código de saída diferente de zero, enquanto (para todas as intenções e finalidades) X ; Y ; Z
executará todos os três independentes dos códigos de saída do comando X e Y.