A realidade está em algum lugar entre as duas possibilidades que você descreve. O Bash não adiciona myvar
ao seu próprio ambiente, pelo menos não ao ambiente de shell completo, como geralmente pensamos; adiciona myvar
ao seu ambiente temporário . Em seguida, ele cria o ambiente de exportação, especificamente para o novo comando, a partir do ambiente temporário, junto com o contexto da variável atual e as funções do shell, forçando, se necessário, a execução do comando filho. Você pode ver isso como chamadas para maybe_make_export_env
no código-fonte do Bash . O ambiente temporário é então limpo depois que a criança é iniciada; procure por dispose_used_env_vars
.
Na prática, isso não faz diferença. O comando filho recebe o ambiente que deveria receber, e o ambiente pai também deve estar pronto quando você recuperar o controle. a menos que você faça alterações no Bash, isso é tudo que importa.