🖥
Bash | あなたが扱っているのは本当に環境変数ですか? (環境変数を上書きできているようで出来てないケース )
スクリプト
たとえば「環境変数 COLOR
に何が与えられても、シェル内で上書きして標準出力する」というスクリプトがある場合。
env.sh
COLOR='green'
echo Varbiable color is $COLOR
echo ENV color is $(printenv COLOR)
環境変数を渡した場合
COLOR=red
を渡してシェルを実行しても、出力は当然、上書きされた値になる。
$ COLOR=red bash env.sh
Varbiable color is green
ENV color is green
環境変数を渡さなかった場合
だがそもそも環境変数 COLOR=
を渡さずシェルを実行した場合。
普通の変数は存在するが、環境変数は存在しない状態になった。
$ bash env.sh
Varbiable color is green
ENV color is
どうやら
シェル実行時に環境変数を渡した場合は、その変数は「環境変数」扱いに。
そうでない場合は「普通の変数」扱いになるようだ。
なおかつご覧のとおり、シェルでは「環境変数」と「普通の変数」の区切りは、わりと曖昧っぽい。
結論
- スクリプト内で、いきなり大文字の変数代入 (
NAME=yuma
) をしても、環境変数にはならない。 - スクリプト内で環境変数を作る場合は export ( ex.
export NAME=yuma
) する。 - いちど環境変数に「なった」ものは、
NAME=yuma
のように、普通の変数と同じように代入できる。 - スクリプト起動時に
Name=yuma example.sh
のように書いた場合、その変数に対して、スクリプト内で export したのと同じ効果が得られる。
初期指定されていない環境変数を上書きする
export すると環境変数を上書きできる。
スクリプト
env.sh
export COLOR='green'
echo Varbiable color is $COLOR
echo ENV color is $(printenv COLOR)
結果
$ bash env.sh
Varbiable color is green
ENV color is green
環境
- bash 3.2
- sh 3.2
参考
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2016-07-27
Discussion