「_」はいつ環境から削除されますか? [コピー]

「_」はいつ環境から削除されますか? [コピー]
$ bash --norc
$ export | grep '_='
declare -x _="/bin/bash"
$ export | grep '_='
$ 

どうしたの_?いつすぐに環境を終了しましたか?

これは私の他の質問に関連しています。」`_`をbash環境にエクスポートできないのはなぜですか?」。

答え1

Bashは、_コマンドを解析するたびに最後のパラメータの値に設定される特別なパラメータです。また、コマンドが実行されるたびに適用されるエクスポートできない特殊属性もあります(参照:bind_lastargBashのソースコードから)。

Startup Bashでは、bash --norcプロンプトに到達するためにコマンドを実行する必要はありません。したがって、_環境に存在する場合は上書きされません。 BashでBashを起動すると、起動時に環境に存在する他の変数と同様に、親Bashが起動する_前に子環境で実行されるコマンドに設定されるため、_最終的にエクスポートされた変数になります。コマンドが実行されなかったため、変数はまだ「エクスポート解除」されていません。これは、最初の項目にそのexport項目が含まれる理由を説明します。

exportコマンド(この場合は最初のコマンド)が実行されるとすぐに、コマンドが上書きされ、エクスポート_フラグが失われます。これは、2番目の項目exportが表示されない理由を説明します。

(内部的には_他の変数と同様に変数なので、読み取り専用にするか整数で表示することで興味深い結果を得ることができます。)

関連情報