で変数を設定するとき.bashrc
、これを使用する必要がありますか?
export VAR=value
それともこれで十分でしょうか?
VAR=value
違いは何ですか(ある場合)?
で変数を設定するとき.bashrc
、これを使用する必要がありますか?
export VAR=value
それともこれで十分でしょうか?
VAR=value
違いは何ですか(ある場合)?
回答:
export VAR=value
やること
VAR=value
スクリプトの期間中のみ変数を設定します(.bashrc
この場合)。スクリプトの子プロセス(存在する場合)にはVARが定義されておらず、スクリプトが終了するVAR
と消えます。
export VAR=value
VAR
子プロセスに渡される変数のリストに明示的に追加します。試してみませんか?シェルを開いて、
PS1="foo > "
bash --norc
新しいシェルはデフォルトのプロンプトを取得します。代わりに次のようなことをした場合
export PS1="foo > "
bash --norc
新しいシェルは、設定したプロンプトを取得します。
更新: Ian Kellingが以下に示すよう.bashrc
に、設定された変数は、ソースとなったシェルで持続し.bashrc
ます。より一般的には、シェルが(source scriptname
コマンドを使用して)スクリプトをソースするときはいつでも、スクリプトで設定された変数はシェルの寿命の間持続します。
PS1
環境変数としてエクスポートされる変数の悪い例です。これは、シェルである子プロセスにのみ意味があり、シェル(bashとdashなど)によって解釈が異なります。ベストプラクティスは、単にそれを通常のシェル変数として設定すること.bashrc
です。環境変数のより良い例としてはHOME
、PATH
、EDITOR
、など
どちらも問題なく動作するように見えますが、エクスポートを使用すると、変数がサブシェルや他のプログラムで使用できるようになります。これをテストするには、これを試してください。
これらの2行を.bashrcファイルに追加します
TESTVAR="no export"
export MYTESTVAR="with export"
次に、新しいシェルを開きます。
実行するecho $TESTVAR
とecho $MYTESTVAR
、各変数の内容が表示されます。その同じシェル内で、これらの2行を.bashrcファイルから削除し、実行bash
してサブシェルを開始します。
実行中echo $TESTVAR
は空の出力にecho $MYTESTVAR
なりますが、実行中は「with export」と表示されます