Bash Manual dice (manpage, la mia enfasi):
Quando Bash invoca un comando esterno, la variabile
$_viene impostata sul percorso completo del comando e passata a quel comando nel suo ambiente.
E ( parametri speciali ):
_(
$_, un trattino basso). All'avvio della shell, impostare sul percorso assoluto usato per invocare la shell o lo script della shell in esecuzione come passato nell'ambiente o nell'elenco degli argomenti. Successivamente, si espande all'ultimo argomento al comando precedente, dopo l'espansione. Impostato anche sul percorso completo utilizzato per richiamare ciascun comando eseguito e inserito nell'ambiente esportato in quel comando. Quando si controlla la posta, questo parametro contiene il nome del file di posta.
In una shell bash, corro:
$ bash $ export | grep '_='Secondo il manuale,
_dovrebbe essere una variabile d'ambiente della nuova shell bash.exportdovrebbe generare tutte le variabili d'ambiente della nuova shell bash, ma non produce_. Quindi mi chiedo se_sia una variabile d'ambiente della nuova shell bash?In realtà in qualsiasi shell bash, succede la stessa cosa
$ export | grep '_='non genera nulla. Quindi mi chiedo se
_c'è mai una variabile d'ambiente di una shell bash?Per confronto:
$ dash $ export | grep '_=' export _='/bin/dash'
Il mio post è ispirato al commento di Mike e alla risposta di Stephane .
bash -c export | grep _=(da Bash), sarà mostrare come la shell genitore invocato il bashcomando, anche se $_non è impostata nel genitore.
exportè integrato, ma se lo usiprintenv _ti mostrerà come è stato invocato:/usr/bin/printenvsu questo sistema.