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
そうではありません。
エクスポートされた変数とエクスポートされていない変数の違いは何ですか?
ベストアンサー1
エクスポートされた変数はそれをエクスポートするシェルのコマンド環境にインポートされますが、エクスポートされていない変数は現在のシェル呼び出しにローカルです。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
$$