O segundo caso é diferente porque o pipe é executado em um subshell, onde T_aft=$T
não está definido.
Eu não consigo descobrir. Como eu li no documentaion, {}
não cria um subshell. No entanto, parece que às vezes acontece:
$ 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=
Qual é a diferença? Por que T está faltando no segundo caso?