&&
é um operador lógico. ;
é um sequenciamento simples.
Em cmd1 && cmd2
, o cmd2 será executado apenas se o cmd1 sair com um código de retorno bem-sucedido.
Enquanto que o cmd1; cmd2
cmd2 será executado independentemente do status de saída do cmd1 (supondo que você não tenha configurado o shell para sair em todas as falhas do script ou algo assim).
Em uma nota relacionada, com o cmd1 || cmd2
uso do ||
operador lógico 'OR', o cmd2 será executado apenas se o cmd1 falhar (retorna um código de saída diferente de zero).
Esses operadores lógicos às vezes são usados em scripts no lugar de uma instrução if básica. Por exemplo,
if [[ -f "$foo" ]]; then mv "$foo" "${foo%.txt}.mkd"; fi
... pode ser alcançado de forma mais concisa com:
[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"
& (simple sequencing), && (conditional AND) and || (conditional OR)
.