web-dev-qa-db-ja.com

中括弧とサブシェル

私はそれを理解することはできません。私がドキュメンテーションで読んだように、{}はサブシェルを作成しません。ただし、そのように見えることもあります。

  $ unset T; echo "T_bfr=$T"; echo $$; { echo $$; export T=1; }; echo "T_afr=$T"
T_bfr=
4874
4874
T_afr=1

 $ unset T; echo "T_bfr=$T"; echo $$; { echo $$; export T=1 ; }|cat; echo "T_afr=$T"
T_bfr=
4874
4874
T_afr=

違いはなんですか? 2番目のケースでTが欠落しているのはなぜですか?

1
rush

2番目のケースは、パイプがサブシェルで実行されるため異なります。ここで、T_aft=$Tは設定されていません。

2
lurker