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í !