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