ここでのロジックは、 &&
を使用することです すでに エラーチェック。 if
内で bash が失敗を処理しないのと同じ方法 set -e
であっても、中止する価値がある条件 .
コマンドを括弧で囲むと、実際にはそれらのコマンドをサブシェル内で実行しているため、スクリプト自体はそのサブシェルの戻りのみを認識します。つまり、&&
を認識しません。
リファレンスマニュアルを引用:
<ブロック引用>失敗したコマンドが、while または until キーワードの直後のコマンド リストの一部である場合、if ステートメントのテストの一部である場合、&&または || で実行されるコマンドの一部である場合、シェルは終了しません。最後の &&または || に続くコマンドを除くリスト、パイプライン内の最後のコマンド以外のコマンド、またはコマンドの戻りステータスが ! で反転されている場合。