Посібник Баша говорить (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
у цій системі.