Logika je taková, že používáte &&
již je kontrola chyb. Stejným způsobem bash neošetřuje selhání v rámci if
stav, který stojí za to přerušit, dokonce i s set -e
.
Když zabalíte příkazy do závorek, ve skutečnosti je spouštíte v podslupce, takže samotný skript vidí pouze návrat této podskořápky, tj.:neví, že &&
je vůbec zapojen, takže se přeruší, jak očekáváte.
Citujte referenční příručku:
Shell se neukončí, pokud je příkaz, který selže, součástí seznamu příkazů bezprostředně po chvíli nebo dokud klíčové slovo, součást testu v příkazu if, součást jakéhokoli příkazu provedeného v &&nebo || seznam kromě příkazu následujícího za koncovým &&nebo ||, jakéhokoli příkazu v kanálu kromě posledního, nebo pokud je návratový stav příkazu invertován pomocí !