Bash Manual mówi (manpage, mój nacisk):
Gdy Bash wywołuje polecenie zewnętrzne, zmienna
$_jest ustawiana na pełną ścieżkę do polecenia i przekazywana do tego polecenia w jego środowisku.
I ( parametry specjalne ):
_(
$_podkreślenie.) Przy uruchamianiu powłoki ustaw bezwzględną nazwę ścieżki używaną do wywoływania powłoki lub skryptu powłoki wykonywanego tak, jak przekazano w środowisku lub liście argumentów. Następnie rozwija się do ostatniego argumentu do poprzedniego polecenia, po rozwinięciu. Ustawiono również na pełną ścieżkę używaną do wywołania każdego wykonanego polecenia i umieszczonego w środowisku wyeksportowanym do tego polecenia. Podczas sprawdzania poczty ten parametr przechowuje nazwę pliku poczty.
W powłoce bash uruchamiam:
$ bash $ export | grep '_='Zgodnie z instrukcją
_powinna być zmienną środowiskową nowej powłoki bash.exportma wypisywać wszystkie zmienne środowiskowe nowej powłoki bash, ale nie wypisuje_. Zastanawiam się więc, czy_zmienna środowiskowa nowej powłoki bash?Tak naprawdę dzieje się w każdej powłoce bash
$ export | grep '_='nic nie wydaje. Zastanawiam się więc, czy
_kiedykolwiek jest zmienną środowiskową powłoki bash?Dla porownania:
$ dash $ export | grep '_=' export _='/bin/dash'
Mój post jest zainspirowany komentarzem Mike'a i odpowiedzią Stephane'a .
bash -c export | grep _=(od bash), będzie pokazać jak skorupa rodzic powołuje się na bashkomendę, choć $_nie jest ustawiona na rodzica.
exportjest wbudowany, ale jeśli go użyjeszprintenv _, pokaże ci, jak został wywołany:/usr/bin/printenvw tym systemie.