Руководство 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в этой системе.