Sim, _ é uma variável de ambiente do novo shell Bash; você pode ver isso executando
tr 'tr '%pre%' '\n' < /proc/$$/environ | grep _=
' '\n' < /proc/$$/environ | grep _=
dentro do shell: mostra o conteúdo do ambiente inicial do shell. Você não verá o primeiro shell porque não havia um shell anterior para defini-lo antes de começar.
Expandir $_ dentro do Bash refere-se ao parâmetro _ special, que é expandido para o último argumento do comando anterior. (Internamente, Bash lida com isso usando uma variável _ shell, que é atualizada toda vez que um comando é analisado, mas isso é realmente um detalhe de implementação. É" não exportado "toda vez que um comando é analisado. ) export não mostra _ porque não é uma variável marcada como exportada; você pode, no entanto, vê-lo na saída de set .
No primeiro exemplo, o novo Bash shell analisa e executa os comandos em seus arquivos de inicialização, portanto, ao executar explore | grep '-=' , _ já foi sobrescrito e marcado como não exportado.
No exemplo dash , parece não executar nenhum arquivo de inicialização, portanto, você está vendo a variável como uma variável de ambiente que foi definida pelo Bash antes de executar dash .