Die Logik hier ist, dass Ihre Verwendung von && ist bereits Fehlerüberprüfung. Genauso behandelt Bash einen Fehler innerhalb eines if nicht Bedingung als abbruchwürdig, auch mit set -e .
Wenn Sie die Befehle in Klammern einschließen, führen Sie diese Befehle tatsächlich innerhalb einer Subshell aus, sodass das Skript selbst nur die Rückgabe dieser Subshell sieht, dh:es ist sich nicht bewusst, dass && überhaupt beteiligt ist, also bricht es wie erwartet ab.
Zitieren Sie das Referenzhandbuch:
Die Shell wird nicht beendet, wenn der fehlgeschlagene Befehl Teil der Befehlsliste ist, die unmittelbar auf das Schlüsselwort while oder until folgt, Teil des Tests in einer if-Anweisung, Teil eines beliebigen Befehls, der in einem &&oder || ausgeführt wird außer dem Befehl nach dem abschließenden &&oder ||, jedem Befehl in einer Pipeline außer dem letzten oder wenn der Rückgabestatus des Befehls mit !
invertiert wird