BASHではエクスポートは何をしますか?[複製]


75

重複の可能性:
bashの「a = b」と「export a = b」の違い

認めるのは難しいですがexport、環境変数が正確に何をするのか、私は本当に理解していません。変数をエクスポートしないと、子プロセスで変数が表示されないことがありますが、場合によっては表示されるようです。私が言うとき、本当に何が起こっているのか

export foo=5

そして、いつ変数をエクスポートすべきではありませんか?


このトピックに関する他の少なくとも1つの役立つ質問へのリンクがあります。superuser.com/questions/ 143413 / linux-environment-variables ... 。
オーガ詩sal 33


一般的な用途の1つは、export.bashrc / .bash_profileにステートメントを追加して、に類似した永続的なグローバル変数を作成することです$HOME
エヴァンプライス

注意してください、この物語には最初に現れる以上のものがあります。私の答えを確認してください。
ジェイソンレオンハルト

回答:


15

からman bash

環境

プログラムが呼び出されると、環境と呼ばれる文字列の配列が与えられます。これは、name = valueという形式の名前と値のペアのリストです。

シェルは、環境を操作するいくつかの方法を提供します。呼び出し時に、シェルは独自の環境をスキャンし、見つかった名前ごとにパラメーターを作成し、子プロセスへのエクスポート用に自動的にマークします。実行されたコマンドは環境を継承します。export そして declare -x コマンドは、パラメータや機能が追加および環境から削除することを可能にします。環境内のパラメーターの値が変更されると、新しい値が環境の一部になり、古い値が置き換えられます。実行されたコマンドによって継承される環境は、シェルの初期環境から構成されます。シェルの値は、シェルで変更でき、unset コマンドによって削除されたペア、エクスポートおよびdeclare -xコマンドを介した追加をすべて削除でき ます。


73
説明の追加努力なしにドキュメントからの抜粋をコピーペーストすることは、賛成されるべきではありません。
アルトゥール

29
その抜粋はあまり明確ではなく、率直に言って私は何が起こっているのか理解できませんでした。
トリメジストス

4
@Artur:それどころか:(からの抜粋)文書が質問に答える場合、私はむしろ追加の説明はありません。
ルネニフェネガー14年

1
@RenéNyffeneggerしかし、そうではないようです。少なくとも、BloodPhiliaの回答を読むまで、それは受け入れられませんでした。
ヴラディスラフラストルーニ14年

1
ArturとTrismegistosが作成したポイントは、誰でもペーストをコピーできることであり、常に十分であるとは限らず、明確にし、適切な答えを提供できると思います。いくつかのドキュメントをコピーして貼り付けるか、リンクを提供することは問題ありませんが、実際には推奨されますが、追加の品質説明が必要です。さらに、その説明は、ReneNyffeneggerのような人々が必要としない場合は簡単に無視することができますが、それから利益を得る人々のためにそこにあります。私たちは皆、学習しようとしており、さまざまな方法で理解を得ています。これは、さまざまな学習スタイルをカバーし、あなたの評価を改善するのに役立ちます。
jasonleonhard

99

エクスポートされた変数は子プロセスに渡されますが、エクスポートされていない変数は渡されません。


その影響に関するドキュメントを参照できますか。それ以上の情報を探しています。例えば、など、変数は一度だけエクスポートする必要がないか、すべての変更後、それをエクスポートする必要があります
チャス。オーエンズ

1
これを確認できます
BloodPhilia

3
あなたがパスに何かを追加することでこれを確認することができます(に言うPYTHONPATH)、次に注目している、あなたはできますがecho $PYTHONPATH、それはあなたまでのpythonやbashスクリプトで認識されないexportこと
KaushikによるGhose

この答えも完全に真実ではないようです。たとえば、Bashサブシェルは子プロセス(に準拠$BASHPID)ですが、親シェルからエクスポートされていない変数を読み取ることができます。簡単な証拠:x="y"; echo "$BASHPID: $x"; (echo "$BASHPID: $x") 私の推測では、これは子プロセスがサブシェルであるときに発生する特別なケースです。
-JepZ

20

を使用するexportと、エクスポートコマンドが呼び出されたシェルの環境変数リストに変数が追加され、シェルのすべての環境変数が子プロセスに渡されるため、使用できます。

シェルを終了すると、その環境は破棄されます。そのため、環境変数は、たとえば.bashrcファイルで、ログイン時に宣言およびエクスポートされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.