A diferença básica é que todos os comandos separados por ;
seriam executados, enquanto quando os comandos são separados por &&
, o comando subseqüente seria executado somente se o anterior fosse encerrado com um código de retorno de 0
.
Assim, quando você diz:
command1; command2; command3
o shell executa command1
, depois command2
e quando este último também está completo command3
.
Por outro lado,
command1 && command2 && command3
faz com que command1
seja executado. Se tiver êxito, ou seja, sair com um código de retorno de 0
, então command2
será executado. Da mesma forma, command3
é executado se o comando anterior foi executado com sucesso.
A última construção é útil quando você deseja executar comandos condicionalmente.