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.export
deve 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 bash
comando, mesmo que $_
não está definido no pai.
export
é um builtin, mas se você o usarprintenv _
, ele mostrará como foi chamado:/usr/bin/printenv
neste sistema.