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
.