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.exportest 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 bashcommande, même si $_est dans le parent unset.
exportest une fonction intégrée, mais si vous l'utilisezprintenv _, elle vous montrera comment elle a été invoquée:/usr/bin/printenvsur ce système.