As variáveis globais vivem do momento em que são configuradas até o momento em que são desativadas ou o processo é encerrado. Variáveis globais (nem locais) não são herdadas por processos filhos não relacionados (se o processo filho for um fork (um subshell), ele obtém uma cópia de tudo - exportado ou não).
Variáveis globais exportadas são como variáveis globais, mas também são automaticamente herdadas (como parte do ambiente de processo) por processos filhos, mesmo que não relacionados. (Com as exportações, você pode passar uma variável como CXXFLAGS para um processo como make , que definitivamente não é uma subcamada de seu shell, e todo processo que make gera também obterá essa variável também .)
No seu exemplo, () cria uma subshell, que obtém uma cópia de tudo.
O comando foo modifica a subshell adicionando uma variável exportada e, em seguida, a subshell termina sem nunca utilizar a variável exportada (nenhum neto a herdou). Agora, nenhuma informação viaja implicitamente de processos filhos para processos pai. O que as crianças fazem em seu ambiente não afeta seus pais. Essa é a razão pela qual sua variável one não está definida.
BTW, esses eval s são eval desnecessários neste contexto.