Xeebi

home categories feeds

Bash で export 付けるのと付けないのとでどう違うのか

問題

bash で変数を定義したい.

foo=bar
echo $foo
# => bar

でも,.bashrc で書くときとかってこうするよね

export $foo=bar
echo $foo
# => bar

どう違うの?

答え

export をつけるとそこから出た subprocess みんながそれを参照できるようになる.(cf. stackoverflow)

つまりこうだ

$ export foo=bar
$ baz=moo
$ echo $foo,$baz
bar,moo
$ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:18) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['foo']
'bar'
>>> 'baz' in os.environ
False

ついでに background

勿論 .bashrc とかで使うのもそうだが,heroku では環境変数を設定しとけるので,例えば api key などをリポジトリには含めずにソースを公開したいけど そういう情報はどっかから見られないと困る,という時に,設定した環境変数を参照するようにすればそういうところを隠して動作させることが出来る. ローカルにも走らせたければ何らかの .gitignore に入ったファイルにそれらを書き込んでおけば良くて,というような話.