サブシェルなしで複数の条件がある場合はバッシングしませんか?

サブシェルなしで複数の条件がある場合はバッシングしませんか?

シェルifステートメントで複数の条件を組み合わせて組み合わせを無効にしたいと思います。単純な条件の組み合わせについては、次の作業コードがあります。

if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
  # do stuff with the files
fi

これは素晴らしい作品です。これを否定するには、次の作業コードを使用できます。

if ! ( [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ) ; then
  echo "Error: You done goofed."
  exit 1
fi
# do stuff with the files

これは期待どおりに機能します。しかし、私はかっこが実際に何をしているのか分からないことを発見しました。私考えるグループ化にのみ使用しますが、実際にサブシェルは作成されますか? (どうすればわかりますか?)では、サブシェルを作成せずに条件をグループ化する方法はありますか?

ベストアンサー1

{ list;}代わりに、以下を使用する必要があります(list)

if ! { [ -f file1 ] && [ -f file2 ] && [ -f file3 ]; }; then
  : do something
fi

両方グループ化コマンドしかし、{ list;}現在のシェル環境でコマンドを実行します。

リストと逆方向の単語を区別するには;inが必要です。他の区切り文字も使用できます。次のスペース(またはその他の区切り文字)も必要です。{ list;}}{

おすすめ記事