O Bash Manual diz (página de manual, minha ênfase):
Quando o Bash chama um comando externo, a variável
$_é configurada para o nome do caminho completo do comando e passada para esse comando em seu ambiente.
E ( Parâmetros especiais ):
_(
$_, um sublinhado.) Na inicialização do shell, defina o nome do caminho absoluto usado para chamar o script do shell ou shell sendo executado conforme passado na lista de ambiente ou argumento. Posteriormente, expande para o último argumento para o comando anterior, após a expansão. Defina também o nome do caminho completo usado para chamar cada comando executado e colocado no ambiente exportado para esse comando. Ao verificar o correio, este parâmetro mantém o nome do arquivo de correio.
Em um shell bash, eu corro:
$ bash $ export | grep '_='De acordo com o manual,
_deve ser uma variável de ambiente do novo shell bash.exportdeve gerar todas as variáveis de ambiente do novo shell bash, mas não gera_. Então, eu me pergunto se_é uma variável de ambiente do novo shell bash?Na verdade, em qualquer shell bash, acontece a mesma coisa
$ export | grep '_='não produz nada. Então, eu me pergunto se
_alguma vez é uma variável de ambiente de um shell bash?Para comparação:
$ dash $ export | grep '_=' export _='/bin/dash'
Meu post é inspirado no comentário de Mike e na resposta de Stephane .
bash -c export | grep _=(a partir Bash), vai mostrar como o shell pai invocou o bashcomando, mesmo que $_não está definido no pai.
exporté um builtin, mas se você o usarprintenv _, ele mostrará como foi chamado:/usr/bin/printenvneste sistema.