Bash Manual dit (page de manuel, je souligne):
Lorsque Bash appelle une commande externe, la variable
$_
est définie sur le chemin d'accès complet de la commande et transmise à cette commande dans son environnement.
Et ( paramètres spéciaux ):
_
(
$_
, un trait de soulignement.) Au démarrage du shell, définissez le chemin d'accès absolu utilisé pour appeler le shell ou le script de shell en cours d'exécution tel que transmis dans l'environnement ou la liste d'arguments. Par la suite, se développe jusqu'au dernier argument de la commande précédente, après expansion. Définissez également le chemin d'accès complet utilisé pour appeler chaque commande exécutée et placée dans l'environnement exporté vers cette commande. Lors de la vérification du courrier, ce paramètre contient le nom du fichier courrier.
Dans un shell bash, je lance:
$ bash $ export | grep '_='
Selon le manuel,
_
devrait être une variable d'environnement du nouveau shell bash.export
est censé sortir toutes les variables d'environnement du nouveau shell bash, mais il ne sort pas_
. Je me demande donc si_
est une variable d'environnement du nouveau shell bash?En fait, dans n'importe quel shell bash, la même chose se produit
$ export | grep '_='
ne produit rien. Je me demande donc s'il
_
existe jamais une variable d'environnement d'un shell bash?En comparaison:
$ dash $ export | grep '_=' export _='/bin/dash'
Mon message est inspiré du commentaire de Mike et de la réponse de Stéphane .
bash -c export | grep _=
(Bash), va montrer comment le shell parent a invoqué la bash
commande, même si $_
est dans le parent unset.
export
est une fonction intégrée, mais si vous l'utilisezprintenv _
, elle vous montrera comment elle a été invoquée:/usr/bin/printenv
sur ce système.