違いは何ですか:
a=b
そして
export a=b
バッシュで?
どちらも環境変数を定義していることを理解していますが、違いを完全には理解していません。
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
を書かなければなりませんでした。
export
を使用しない場合は、環境変数を定義していません。シェル変数だけです。
シェル変数は、シェルプロセスでのみ使用できます。環境変数は、シェルだけでなく、後続のプロセスで使用できます。
また、エクスポートを使用せずに、呼び出し元のシェルで変数を使用できるようにするには、次のようにします。
ファイルa.kshは-
#!/bin/ksh
FOO=bar
プロンプトで、これを実行します
> . a.ksh
これにより、同じシェル内でコマンドが実行され、$ FOOが使用可能になります。
一方、
> a.ksh
$ FOOは、a.kshの呼び出し後は存在しないため、a.ksh内でのみ使用可能になります。
すでに回答されていることに加えて、これらのステートメントはどちらも、「a」がシェルまたは環境変数としてすでに存在する可能性があるため、必ずしも環境変数を定義(つまり、作成と設定)するわけではありません。
後者の場合、両方のステートメントは厳密に同等です。