これは Bash の man ページからの抜粋です:
<ブロック引用>
export [-fn] [名前[=単語]] ...
エクスポート -p
指定された名前は、その後に実行されるコマンドの環境に自動的にエクスポートされるようにマークされます。 -f オプションを指定すると、名前は関数を参照します...
現在の環境でのみ変数が必要な場合は、エクスポートを使用する必要はありません。
var=value
編集:
エクスポートなし:現在の環境のみ。エクスポートあり:現在の環境と子環境。
以下は、子環境での変数の可用性に対するエクスポートの影響と、子環境での変更が親に影響を与えないことのデモンストレーションです:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
最初のエコーの後 (echo "parent..."
) "123" と "456" が表示されるのは、どちらも var1
であるためです。 そして var2
現在の環境でアクティブです。 var3
の値が表示されない まだ設定されていないためです。
「var3=...
」で始まる行の後 " var1
の値が表示されません 輸出されていないからです。あなたはする var2
の値を参照してください だったから エクスポートされました。 var3
の値が表示されます 子環境用に設定されているためのみ .
(bash -c
-c
への引数の内容でスクリプトを実行するのと同じです オプション。スクリプトまたはその他の実行可能ファイル、またはこの場合は bash -c
への引数 現在の環境の子になり、その結果、もちろん子の親になります。)
「スクリプト」では、変数の値が変更されます。これらの新しい値が出力されます。
「スクリプト」が終了すると、実行は親環境 (この場合はコマンド ライン) に戻ります。最後のエコーの後、元の値が表示されます。これは、子環境で行われた変更が親に影響しないためです。
あなたはそれを言います
<ブロック引用>私は常に export コマンドを使用して環境変数を設定しています
ちなみに、あなたが本当に環境変数を持続させる方法を尋ねようとしているように聞こえます。そのためには、export VAR="foo"
を配置する必要があります。 $HOME/.bash_profile ファイル内のステートメント (bash を使用している場合)。その環境変数を root 以外のすべてのユーザーに対して持続させたい場合は、それを /etc/profile に追加します。 root ユーザーにも追加する場合は、 /root/.bash_profile に設定します。
これは、選択したシェルが bash であるすべてのログイン シェルで機能します。非ログイン シェルの場合は、.bashrc を使用する必要があります。他のシェルについて提供できる洞察はありません:D