我想不通。正如我在文档中读到的那样,{}
不会创建子外壳。然而,看起来有时确实如此:
$ 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=
有什么不同?为什么第二种情况中缺少 T?
答案1
第二种情况有所不同,因为该管道在T_aft=$T
未设置的子 shell 中运行。