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.
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.
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.
Respostas:
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 quecommand2
seja executado apenas secommand1
executado 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.fonte
&&
diferente de um único e comercial&
no bash?&
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".comando1 && comando2
command1 && command2
executacommand2
se (e somente se) acommand1
execuçã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; command2
executacommand2
após a execuçãocommand1
, sequencialmente. Não importa se os comandos foram bem-sucedidos ou não.fonte
O primeiro é uma lógica simples que
AND
usa 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
é avaliadoFALSE
e o segundo comando não é executado. O último simplesmente executa os dois em ordem.fonte