$ bash --norc
$ export | grep '_='
declare -x _="/bin/bash"
$ export | grep '_='
$
どうしたの_
?いつすぐに環境を終了しましたか?
これは私の他の質問に関連しています。」`_`をbash環境にエクスポートできないのはなぜですか?」。
答え1
Bashは、_
コマンドを解析するたびに最後のパラメータの値に設定される特別なパラメータです。また、コマンドが実行されるたびに適用されるエクスポートできない特殊属性もあります(参照:bind_lastarg
Bashのソースコードから)。
Startup Bashでは、bash --norc
プロンプトに到達するためにコマンドを実行する必要はありません。したがって、_
環境に存在する場合は上書きされません。 BashでBashを起動すると、起動時に環境に存在する他の変数と同様に、親Bashが起動する_
前に子環境で実行されるコマンドに設定されるため、_
最終的にエクスポートされた変数になります。コマンドが実行されなかったため、変数はまだ「エクスポート解除」されていません。これは、最初の項目にそのexport
項目が含まれる理由を説明します。
export
コマンド(この場合は最初のコマンド)が実行されるとすぐに、コマンドが上書きされ、エクスポート_
フラグが失われます。これは、2番目の項目export
が表示されない理由を説明します。
(内部的には_
他の変数と同様に変数なので、読み取り専用にするか整数で表示することで興味深い結果を得ることができます。)