シェル変数と環境変数の混乱を明確にしたいと思います。シェル変数があり、それを環境変数に設定する次のテストを実行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
、それともシェルから完全に削除され、環境にのみ存在するため、その値は印刷されますか?echo
abc
abc
echo
答え1
エクスポートは変数abcをシェルから環境に移動しますか、それとも環境にコピーを作成して新しい値を割り当てますか?
どちらもありません。 export
エクスポートする変数を表示するだけです。
外部コマンドが実行されると、シェルはそれを渡す環境を作成します。エクスポート用にマークされた変数のみが環境に追加されます。説明は次のとおりですman bash
。
エクスポート用にマークされたシェル変数と関数、およびコマンド用にエクスポートされた変数が環境に渡されます。
env
これは外部注文する。したがって、エクスポートされた変数のみを報告できます。
「コマンドのためにエクスポートした変数」の意味
一般変数の割り当てには永続性があります。変数は削除(設定解除)されるまで存在します。特定のコマンドで使用するための一時変数を作成することもできます。
a
たとえば、次のコマンドで使用する変数を作成しますenv
。
$ a=b env | grep ^a=
a=b