O shell que está sendo executado quando você efetua login para ler seus comandos e executá-los mantém todas as variáveis. Se você executar um segundo shell, ele terá sua própria coleção de variáveis. Você pode executar o comando set
para ver uma lista das variáveis. O comando set
é executado dentro do shell, em vez de iniciar um novo processo.
Variáveis de ambiente são mantidas em um espaço separado ou sinalizadas como tal (se for importante, então leia o código-fonte do shell) para que elas sejam passadas ao longo dos programas que estão sendo executados pelo shell.
Usar dois hashtables parece razoável para mim.