Потому что, когда вы выполняете команду в $ (), она открывает новую подоболочку.
:-:echo "one is $one and Zero is $zero"
one is 1 and Zero is 0
:-:eval $one/$zero 2> error.txt
:-:cat error.txt
bash: 1/0: No such file or directory
При выполнении команды в данной оболочке ошибка перенаправляется в файл.
:-:$($one/$zero) 2> error_1.txt
bash: 1/0: No such file or directory
:-:cat error_1.txt
При выполнении команды в подоболочке ошибка перенаправляется на стандартный вывод.
:-:$($one/$zero 2> error_1.txt)
:-:cat error_1.txt
bash: 1/0: No such file or directory
:-:
Но когда я перенаправляю ошибку std в файл внутри subshell, он фиксируется.