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