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.export
ma 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 bash
komendę, choć $_
nie jest ustawiona na rodzica.
export
jest wbudowany, ale jeśli go użyjeszprintenv _
, pokaże ci, jak został wywołany:/usr/bin/printenv
w tym systemie.