Qual é a diferença entre "e comercial" duplo (&&) e ponto e vírgula (;) no Linux Bash?


112

Qual é a diferença entre "e" comercial e ponto e vírgula no Linux Bash ?

Por exemplo,

$ command1 && command2

vs

$ command1; command2


9
Em relação à falta de tópico, da última vez que verifiquei, bash ainda era uma linguagem de programação, mas eu estava errado antes e poderia ser algum doce de frutas secas.
Steve K,

É, e se você estivesse fazendo uma pergunta sobre um comportamento específico ou a maneira certa de fazer uma determinada coisa, certamente estaria no assunto. Isso cai em uma categoria mais cinza de "questão sobre a sintaxe de uma linguagem", que não é tão claramente uma questão de "programação" no que me diz respeito.
Etan Reisner

4
bash é em alguns aspectos seco, e em alguns aspectos doce. No final do dia é bastante agradável e digerível. No entanto, não pode ser facilmente roubado de bebês.
code_monk de

Respostas:


138

O &&operador é um operador booleano AND: se o lado esquerdo retorna um status de saída diferente de zero, o operador retorna esse status e não avalia o lado direito (causa um curto-circuito), caso contrário, avalia o lado direito e retorna seu status de saída . Isso é comumente usado para garantir que command2seja executado apenas se command1executado com êxito.

O ;token apenas separa os comandos, então ele executará o segundo comando, independentemente de o primeiro ser bem-sucedido ou não.


6
O E comercial duplo é &&diferente de um único e comercial &no bash?
Charlie Parker

16
@CharlieParker &faz com que o comando seja executado em segundo plano, então sim. "Executar em segundo plano" é muito diferente de "executar este próximo comando apenas se este outro for bem-sucedido".
cdhowie

O command2 só executará o command1 e retornou o status de saída zero , o que significa que foi concluído com êxito.
Nik

33

comando1 && comando2

command1 && command2executa command2se (e somente se) a command1execução terminar com sucesso. No jargão do Unix, isso significa código de saída / código de retorno igual a zero.

command1; command2

command1; command2executa command2após a execução command1, sequencialmente. Não importa se os comandos foram bem-sucedidos ou não.


6

O primeiro é uma lógica simples que ANDusa avaliação de curto-circuito, o último simplesmente delimita dois comandos.

O que acontece na realidade é que quando o primeiro programa retorna um código de saída diferente de zero, o todo ANDé avaliado FALSEe o segundo comando não é executado. O último simplesmente executa os dois em ordem.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.