Bash - シェルと環境変数

Bash - シェルと環境変数

シェル変数と環境変数の混乱を明確にしたいと思います。シェル変数があり、それを環境変数に設定する次のテストを実行abcしましたexport

$ 
$ abc="shell var"
$ env | grep abc
$ echo $abc
shell var
$ export abc="env var"
$ env | grep abc
abc=env var
$ echo $abc
env var
$ unset abc
$ env | grep abc
$ echo $abc
$ 

エクスポートが完了した後echo $abc

質問:

  • エクスポートはabc変数をシェルから環境に移動しますか、それとも環境にコピーを作成して新しい値を割り当てますか?

  • 2番目のジョブがecho完了したら、それが環境にあることを確認して印刷しますかexport、それともシェルから完全に削除され、環境にのみ存在するため、その値は印刷されますか?echoabcabcecho

答え1

エクスポートは変数abcをシェルから環境に移動しますか、それとも環境にコピーを作成して新しい値を割り当てますか?

どちらもありません。 exportエクスポートする変数を表示するだけです。

外部コマンドが実行されると、シェルはそれを渡す環境を作成します。エクスポート用にマークされた変数のみが環境に追加されます。説明は次のとおりですman bash

エクスポート用にマークされたシェル変数と関数、およびコマンド用にエクスポートされた変数が環境に渡されます。

envこれは外部注文する。したがって、エクスポートされた変数のみを報告できます。

「コマンドのためにエクスポートした変数」の意味

一般変数の割り当てには永続性があります。変数は削除(設定解除)されるまで存在します。特定のコマンドで使用するための一時変数を作成することもできます。

aたとえば、次のコマンドで使用する変数を作成しますenv

$ a=b env | grep ^a=
a=b

関連情報