出力とコマンドをグループ化するためのbashの()と{}の違いは何ですか?

出力とコマンドをグループ化するためのbashの()と{}の違いは何ですか?

ここでは、2 番目の echo のみが grep にフィードされます。

$ echo a1; echo a2 | grep -o a
a1
a

ここでは両方のエコーがそうします。

$ { echo a1; echo a2 ;} | grep -o a
a
a

ここもそうです。

$ (echo a1; echo a2 )| grep -o a
a
a

では、() と {} の違いは何でしょうか?

答え1

丸括弧はサブシェルを導入します。

$ a=1; { a=2 ; echo $a ; } ; echo $a
2
2
$ a=1; ( a=2 ; echo $a ; ) ; echo $a
2
1

ただし、$$bash を再初期化する必要がないため、サブシェルでは同じままです$BASHPID

関連情報