8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Bash | あなたが扱っているのは本当に環境変数ですか? (環境変数を上書きできているようで出来てないケース )

Last updated at Posted at 2016-07-27

スクリプト

たとえば「環境変数 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オープンチャットもご利用ください。

Twitter

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?