シェルはどのように環境変数を/どこに保存しますか?

シェルはどのように環境変数を/どこに保存しますか?

$ PWD、$ PATH、$ USERNAMEなどがあります。私は独自のシェルを開発しており、今日の環境変数を導入しました。私が行う方法は、pwd、pathなどという文字列を生成することです。したがって、$ PWDなどのコマンドがエコーされると、pwdを印刷するように指示します。これはbashのようなものですか?まだ環境変数を設定できる条件はありませんが、これに取り組んでみましょう。私の主な質問は、実際のシェルがどこにあり、これを行うかです。

もう少し関連するもう1つの質問は、printenvがこれらすべてとどのように関連していますか? printenvはバイナリであり、現在実行中のシェルの代わりに常にbash環境変数を印刷するので(明らかにパスとパスワードで設定されたプログラムで文字列をどのように検出しますか?)次に始めます。これを持っていますか?

答え1

シェルは任意の方法で環境変数を保存できます。これは実際には関係ありません。関連することは、シェルがprintenvシステムコールを介して環境を子プロセス(含む)に渡すことができる必要があることですexecve

答え2

バラより男7環境。シェルが別のプロセスを実行するとき - どのような方法でも実装する(3) - プロセスは前のプロセスの環境を継承する。便利なシェル設計は、エクスポートされたシェル変数とエクスポートされていないシェル変数の2つのリストを保持することです。エクスポートしたアイテムは、シェル自体の環境で維持できます。フテンプ(3)シェルによって生成されたすべてのプロセスによって自動的に継承されます。エクスポートされていないアイテムは、シェルからのみアクセスできる別のリストに存在できます。

この種のものに興味がある場合は、見つけることができます。LinuxプログラミングインターフェースMichael Kerriskの有用な参考資料です。

関連情報