Bashは、エクスポートされた変数とエクスポートされていない変数を区別しているようです。
例:
$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR
set
変数は表示されますが、env
しません。
$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR
set
両方の変数が表示されますが、env
エクスポートされた変数のみが表示されます。
set
を知っています bashビルトインであり、env
そうではありません。
エクスポートされる変数とエクスポートされない変数の違いは何ですか?
承認された回答:
エクスポートされた変数は、それらをエクスポートしたシェルによって実行されるコマンドの環境に運ばれますが、エクスポートされていない変数は、現在のシェル呼び出しに対してローカルです。 export
から マニュアルページ:
シェルは、指定された名前に対応する変数にエクスポート属性を与えます。これにより、それらは後で実行されるコマンドの環境に置かれます。
set
現在の環境を出力します。これには、エクスポートされていないローカル変数が含まれます。 env
は新しい環境でプログラムを起動するために使用され、引数なしでその新しい環境がどうなるかを出力します。 env
以降 新しい環境を作成している場合、そのシェルから起動されたプログラムの場合と同様に、エクスポートされた変数のみが取得されます。たとえば、最初のシェル内に2番目のシェルを生成します($$
を使用しました 内側のシェルでプロンプトを表すため):
$ FOO=BAR
$ bash
$$ echo $FOO # Note the empty line
$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$
値だけでなく、エクスポートされるのは変数であることに注意してください。これは、export FOO
を実行すると、 、FOO
後で変更された場合でも、グローバル変数になり、後続の環境に表示されます:
$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$