bashの「a = b」と「export a = b」の違い


50

次の違いは何ですか?

a=b

そして

export a=b

バッシュで?

どちらも環境変数を定義していることは理解していますが、その違いを完全には理解していません。


誰かがこれを編集してもらえますか?これはLinuxにまったく関係ありませんが、使用しているシェルのみに依存しています。ここではbashで、Windowsでも機能すると思います。
innaM 2009

私は訂正します。
アダムマタン

回答:


54

export 変数をサブプロセスに伝播します。

たとえば、した場合

FOO=bar

FOOをチェックしたサブプロセスは変数を見つけられませんが、

export FOO=bar

サブプロセスはそれを見つけることができます。

ただし、既に環境変数として定義されいる場合FOOは、その環境変数の値を変更します。FOO=bar

例えば:

FOO=one     # Not an environment variable
export FOO  # Now FOO is an environment variable
FOO=two     # Update the environment variable, so sub processes will see $FOO = "two"

古いシェルはexport FOO=bar構文をサポートしていませんでした。あなたは書く必要がありましたFOO=bar; export FOO


33
実際、「export」を使用しない場合、環境変数を定義するのではなく、シェル変数のみを定義します。シェル変数は、シェルプロセスでのみ使用可能です。環境変数は、シェルだけでなく、後続のプロセスで使用できます。さらに、サブシェルは括弧で囲まれたコマンドであり、シェル変数にアクセスできますが、あなたが話しているのはシェルである子プロセスです。
wfaulkが

これらはどこに保存されますか?
HD13年

28

を使用しない場合export、環境変数を定義していません。単なるシェル変数。

シェル変数は、シェルプロセスでのみ使用可能です。環境変数は、シェルだけでなく、後続のプロセスでも使用できます。


2

また、エクスポートを使用せずに呼び出しシェルで変数を使用できるようにする場合は、次の操作を実行できます。

ファイルa.kshは-

#!/bin/ksh
FOO=bar

プロンプトで、これを実行します

> . a.ksh

これにより、同じシェル内でコマンドが実行され、$ FOOが使用可能になります。

一方、

> a.ksh

$ FOOはa.ksh内でのみ使用可能になります。a.kshの呼び出し後は存在しません。


1
正しい。ご了承ください "。" は、「ソース」の単なるショートカットであり、読みやすくするためにスクリプトで使用されることがあります。「ヘルプ」を参照してください。または詳細については「ヘルプソース」。
sleske

1

すでに答えられていることに加えて、これらのステートメントは両方とも、「a」がシェルまたは環境変数としてすでに存在する可能性があるため、環境変数を必ずしも定義しません(作成対設定)。

後者の場合、両方のステートメントは厳密に同等です。

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