Посібник Баша говорить (manpage, мій акцент):
Коли Bash викликає зовнішню команду, змінна
$_встановлюється на повне ім'я команди та передається цій команді в її середовищі.
І ( Спеціальні параметри ):
_(
$_, підкреслення.) При запуску оболонки встановіть абсолютне ім'я шляху, яке використовується для виклику сценарію оболонки або оболонки, який виконується, як передано у середовищі чи списку аргументів. Згодом розширюється до останнього аргументу до попередньої команди, після розширення. Також встановіть повне ім'я шляху, яке використовується для виклику кожної команди, виконаної та розміщеної у середовищі, експортованому до цієї команди. Під час перевірки пошти цей параметр містить ім'я поштового файлу.
У баш-оболонці я запускаю:
$ bash $ export | grep '_='Згідно з посібником,
_повинна бути змінна середовища нової оболонки bash.exportповинен виводити всі змінні середовища нової оболонки bash, але він не виводить_. Тож мені цікаво, чи_змінна середовище нової оболонки bash?Насправді в будь-якій баш-корпусі відбувається те саме
$ export | grep '_='нічого не виводить. Тож мені цікаво, чи
_коли-небудь змінна середовище bash shell?Для порівняння:
$ dash $ export | grep '_=' export _='/bin/dash'
Мій пост натхненний коментарем Майка та відповіддю Стефана .
bash -c export | grep _=(з Bash), буде показано , як батьківські оболонки застосують bashкоманду, навіть якщо $_вона НЕ задано в батьківському.
exportє вбудованим, але якщо ви використовуєтеprintenv _, він покаже вам, як його викликали:/usr/bin/printenvу цій системі.