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
このシステムでの呼び出し方法が表示されます。