.bashrcで環境変数を設定する最良の方法は何ですか?


回答:


16

最良の方法

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コマンドを使用して)スクリプトをソースするときはいつでも、スクリプトで設定された変数はシェルの寿命の間持続します。


1
「スクリプトの期間中のみ変数を設定します(この場合は.bashrc)」それは偽/誤解を招きます。この方法で設定された変数は、.bashrcを読み取る対話型シェルに保持されます。
イアンケリング

PS1環境変数としてエクスポートされる変数の悪い例です。これは、シェルである子プロセスにのみ意味があり、シェル(bashとdashなど)によって解釈が異なります。ベストプラクティスは、単にそれを通常のシェル変数として設定すること.bashrcです。環境変数のより良い例としてはHOMEPATHEDITOR、など
アンソニーGeoghegan

10

どちらも問題なく動作するように見えますが、エクスポートを使用すると、変数がサブシェルや他のプログラムで使用できるようになります。これをテストするには、これを試してください。

これらの2行を.bashrcファイルに追加します

TESTVAR="no export"
export MYTESTVAR="with export"

次に、新しいシェルを開きます。

実行するecho $TESTVARecho $MYTESTVAR、各変数の内容が表示されます。その同じシェル内で、これらの2行を.bashrcファイルから削除し、実行bashしてサブシェルを開始します。

実行中echo $TESTVARは空の出力にecho $MYTESTVARなりますが、実行中は「with export」と表示されます

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