Bash Manual dice (página de manual, mi énfasis):
Cuando Bash invoca un comando externo, la variable
$_
se establece en la ruta completa del comando y se pasa a ese comando en su entorno.
Y ( Parámetros especiales ):
_
(
$_
, un guión bajo). Al iniciar el shell, establezca el nombre de ruta absoluto utilizado para invocar el shell o el script de shell que se ejecuta como se pasa en el entorno o la lista de argumentos. Posteriormente, se expande hasta el último argumento del comando anterior, después de la expansión. Establezca también el nombre de ruta completo utilizado para invocar cada comando ejecutado y colocado en el entorno exportado a ese comando. Al verificar el correo, este parámetro contiene el nombre del archivo de correo.
En un bash shell, ejecuto:
$ bash $ export | grep '_='
Según el manual,
_
debería ser una variable de entorno del nuevo shell bash.export
se supone que genera todas las variables de entorno del nuevo bash shell, pero no genera_
. Entonces, me pregunto si_
es una variable de entorno del nuevo bash shell.En realidad, en cualquier shell de bash, sucede lo mismo
$ export | grep '_='
no da salida a nada. Entonces, me pregunto si
_
alguna vez es una variable de entorno de un shell bash.Para comparacion:
$ dash $ export | grep '_=' export _='/bin/dash'
Mi publicación está inspirada en el comentario de Mike y la respuesta de Stephane .
bash -c export | grep _=
(de golpe), se mostrará cómo el shell padre invoca el bash
comando, a pesar de que $_
no está definida en la matriz.
export
es incorporado, pero si lo usaprintenv _
, le mostrará cómo se invocó:/usr/bin/printenv
en este sistema.