継承された環境変数は環境変数から継承されますか、それともシェル変数から継承されますか?

継承された環境変数は環境変数から継承されますか、それともシェル変数から継承されますか?

私のbashシェルに次の環境変数があるとしましょう。

export a="Hello World"

bash シェルでプロセスを実行すると、a子プロセスは環境変数を継承します。

私の質問は次のとおりです。a子プロセスから環境変数またはシェル変数に継承されますか?つまり、a子プロセスからエクスポートしますか?

ベストアンサー1

環境変数として。

これは、子プロセスによって開始されたすべての子プロセスもこの変数を継承することを意味します。

テスト:

$ export FOO=bar
$ sh
$ sh
$ sh
$ echo "$FOO"
bar
$ exit
$ exit
$ exit

上記の環境変数を生成するシェルは、FOO新しい対話型シェルを起動します。それは別のことを始め、別のことを始めた。この子孫の殻には$FOO価値がありますbar

別のテストでは、サブシェルが環境変数を変更すると、変更は後続のサブシェルに渡されますが、親シェルには渡されないことがわかりました。

$ export FOO=bar
$ ( ( echo "$FOO"; FOO=quux; ( ( ( echo "$FOO" ) ) ) ) )
bar
quux
$ echo "$FOO"
bar

FOO(この例では、サブシェルもシェル変数を継承するため、エクスポートは重要ではありません。ただし、それぞれが完全に別々のプロセスである場合、( ... )効果は同じです。)( ... )

環境変数は次のように使用できます。どのプロセスはシェルスクリプトではなくシェルから開始されます。 Cプログラムまたはスクリプトがそれをシェル変数として継承することは意味がありません。awkこれらの言語にはそのような変数の概念がないためです(環境変数は厳密にキーと値のペアですが、シェル変数は整数で入力できます)。 、読み取り専用、配列、関連配列など(シェルの機能によって異なります)。

おすすめ記事