回答:
プログラムを実行すると、子プログラムは親から環境変数を継承します。たとえば、が親でに$HOME
設定さ/root
れている場合、子の$HOME
変数もに設定され/root
ます。
これは、エクスポート用にマークされた環境変数にのみ適用されます。コマンドラインで次のように変数を設定した場合
$ FOO="bar"
その変数は、子プロセスでは表示されません。エクスポートしない限り:
$ export FOO
これらの2つのステートメントをbashで単一のステートメントに結合できます(ただし、古い学校のshではできません)。
$ export FOO="bar"
以下は、エクスポートされた変数とエクスポートされていない変数の違いを示す簡単な例です。何が起こっているのかを理解sh -c
するには、親シェルの環境を継承する子シェルプロセスを作成することがわかります。
$ FOO=bar
$ sh -c 'echo $FOO'
$ export FOO
$ sh -c 'echo $FOO'
bar
注:シェル組み込みコマンドのヘルプを表示するには、を使用してくださいhelp export
。シェル組み込みは、のような独立した実行可能ファイルではなく、シェルの一部であるコマンドです/bin/ls
。
Unix
コマンドenv、set、およびprintenvは、すべての環境変数とその値を表示します。envとsetは環境変数を設定するためにも使用され、多くの場合シェルに直接組み込まれます。printenvを使用して、コマンドの唯一の引数として変数名を指定することにより、単一の変数を出力することもできます。
Unixでは、次のコマンドも使用できますが、多くの場合、特定のシェルに依存しています。
export VARIABLE=value # for Bourne, bash, and related shells
setenv VARIABLE value # for csh and related shells
あなたはこれを見ることができます
VARIABLE=value; export VARIABLE
は、割り当てとエクスポートを一度に行うのではなく、次のものが必要になることに注意してください。set
Cシェルのコマンドは、環境変数ではなくシェル変数用です。setenv
はの対応物ですexport
。set
Bourne派生シェルのコマンドは、エクスポートされた(環境)変数だけでなく、すべての変数を出力します。歴史的には、少なくともenv
コマンドはシェルから分離されており(組み込みではありません)、簡単に組み込みにすることができます。これは、コマンドを実行するシェルではなく、特定のコマンドの環境を設定します。
export
bash
シェルおよびその他のBourneシェルバリアントの組み込みコマンドです。子プロセスにエクスポートするシェル変数をマークするために使用されます。