回答:
これはBashのmanページからの抜粋です。
export [-fn] [name [= word]] ...
export -p
指定された名前は、後で実行されるコマンドの環境への自動エクスポート用にマークされます。-fオプションが指定されている場合、名前は関数を参照します...
現在の環境でのみ変数が必要な場合は、エクスポートを使用する必要はありません。
var=value
編集:
エクスポートなし:現在の環境のみ。エクスポートあり:現在の環境と子環境。
以下は、子環境での変数の可用性に対するエクスポートの影響のデモであり、子環境での変更は親には影響しません。
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
最初のエコーの後(echo "parent..."
)あなたは、両方のために「123」と「456」を参照var1
し、var2
現在の環境で活動しています。var3
まだ設定されていないため、の値は表示されません。
" var3=...
" で始まる行の後は、var1
エクスポートされなかったため、の値は表示されません。あなたはないの値を参照してくださいvar2
、それがためた輸出しました。var3
子環境のみに設定されているため、の値が表示されます。
(オプションbash -c
の引数の内容でスクリプトを実行することと同じ-c
です。スクリプトまたは他の実行可能ファイル、またはこの場合、引数bash -c
は現在の環境の子になり、その結果、当然、子の親。)
「スクリプト」では、変数の値が変更されます。これらの新しい値が出力されます。
「スクリプト」が終了すると、実行は親環境(この場合はコマンドライン)に戻ります。最後のエコーの後、子環境で行われた変更は親に影響しないため、元の値が表示されます。
export
これらの子環境で変数を使用できるようにする目的です。
あなたはそれを言う
私は常にexportコマンドを使用して環境変数を設定しています
あなたが言ったように、環境変数をどのように持続させるのかを実際に尋ねようとしているようです。これを行うには、export VAR="foo"
ステートメントを$ HOME / .bash_profileファイルに配置する必要があります(bashを使用している場合)。その環境変数をroot以外のすべてのユーザーに保持したい場合は、/ etc / profileに追加します。rootユーザーにも追加したい場合は、/root/.bash_profileに設定します。
これは、bashが選択したシェルであるすべてのログインシェルで機能します。非ログインシェルの場合、.bashrcを使用する必要があります。他のシェルに提供する洞察力はありません:D
エクスポートはそれを行うための最も簡単な方法です、それでそれをそのままにしないのはなぜですか?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram
プログラムexecutethisprogram
はvariableの値を知りませんFOO
。一方、使用時:FOO=BAR; export FOO; executethisprogram
プログラムexecutethisprogram
はvariableの値を認識しますFOO
。
export FOO
変数をマークするコマンドですFOO
。その親は、スクリプトまたはインタラクティブシェルである場合があります。
次のようなこともできます:
VAR=val application
例えば:
LANG=C ls --help
英語で出力されます。
LANG=pl_PL ls --help
ポーランド語で出力します(利用可能な場合)。
過去のshでは、VAL = valをエクスポートすることはできませんでした。あなたがしなければなりませんでした
VAL=val; export VAL
ls
では、現在の(親)環境の変数の値に影響を与えることなく、子環境(たとえば)の変数の値を設定します。
ls
実行元のプロセスの子です。私が入力した場合ls
、コマンドプロンプトで、対話型シェルは親で、ls
子です。使用するスクリプトがある場合ls
、そのスクリプトは親でls
あり、子です。