La logique ici est que votre utilisation de &&
est déjà vérification des erreurs. De la même manière, bash ne traite pas un échec dans un if
condition vaut la peine d'être abandonnée, même avec set -e
.
Lorsque vous placez les commandes entre parenthèses, vous exécutez en fait ces commandes dans un sous-shell, de sorte que le script lui-même ne voit que le retour de ce sous-shell, c'est-à-dire :il ne sait pas que &&
est impliqué du tout, donc il s'interrompt comme prévu.
Citons le manuel de référence :
Le shell ne se ferme pas si la commande qui échoue fait partie de la liste de commandes suivant immédiatement un mot-clé while ou until, fait partie du test dans une instruction if, fait partie de toute commande exécutée dans un &&ou || liste sauf la commande suivant le &&ou || final, toute commande dans un pipeline sauf la dernière, ou si le statut de retour de la commande est inversé avec !