Bash / sh - diferença entre && e;


136

Normalmente eu uso ;para combinar mais de um comando em uma linha, mas algumas pessoas preferem &&. Existe alguma diferença? Por exemplo, cd ~; cd -e cd ~ && cd -parece fazer a mesma coisa. Qual versão é mais portátil, por exemplo, será suportada por um subconjunto do bash, como o shell do Android?

Respostas:


193

Se o comando anterior falhar, ;o segundo será executado.

Mas com &&o segundo não será executado.

Este é um operando "AND" lógico "lento" entre operações.


2
Em outras palavras, ele tem um comportamento de curto-circuito
peterchaula

@ Peter Qual deles? A ;um ou &&um? Ou você quer dizer ambos?
Shayan

@ Shayan, o &&.
peterchaula 29/08/19

57

Estou usando &&porque há muito tempo no computador próximo:

root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...   
^C

mas não ajudou ...;)

cd /tnp/test && rm -rf * é seguro... ;)


26
Para ser mais seguro, eu usariarm -rf /tnp/test
melvynkim

5
Para ser ainda mais seguro, é melhor usar rm /tnp/test/ -rfpara impedir a entrada mortal de erros de cliques
radrow

22

In cmd1 && cmd2, cmd2só é executado se cmd1for bem-sucedido (retorna 0).

Em cmd1 ; cmd2, cmd2é executado em qualquer caso.

Ambas as construções fazem parte de um shell compatível com POSIX.


11

&&significa executar o próximo comando se o anterior saiu com o status 0. Pelo contrário, use ||ie para ser executado se o comando anterior sair com um status diferente de 0 e ;executa sempre.

Muito útil quando você precisa executar uma ação específica, dependendo se o comando anterior terminou OK ou não.


5

Os comandos separados por ;são executados sequencialmente, independentemente do status de conclusão.

Com &&, o segundo comando é executado apenas se o primeiro for concluído com êxito (retorna o status de saída 0).

Isso é coberto na página de manual do bash em Lists. Eu esperava que qualquer shell do tipo Unix suportasse esses dois operadores, mas não sei especificamente sobre o shell do Android.


2
Aqui está um link para o manual do bash: gnu.org/software/bash/manual/bashref.html#Lists
Glenn Jackman

3

&&permite a execução condicional enquanto ;o segundo comando está sempre sendo executado.

Por exemplo command1 && command2, command2só será executado quando command1tiver terminado com exit 0, sinalizando que tudo correu bem, enquanto no command1 ; command2segundo comando sempre será executado, independentemente do resultado command1.


1

&& é lógico E no bash. Bash tem avaliação de curto-circuito de AND lógico. Esse idioma é uma maneira mais simples de expressar o seguinte:


cmd1;rc=$?
if [ $rc -eq 0 ]; then
   cmd2
fi

Considerando que a ; versão é apenas:


cmd1
cmd2
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.