6
6

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 5 years have passed since last update.

環境変数、シェル変数の動きメモ

Last updated at Posted at 2018-03-13

変数の設定

最初、シェル変数、環境変数の定義はない

# echo $TEST_ENV

# env | grep TEST_ENV
# printenv | grep TEST_ENV
# export -p | grep TEST_ENV
# set | grep TEST_ENV
# set | grep TEST_ENV

シェル変数 TEST_ENV を設定

# TEST_ENV='test'

シェル内で定義した変数の値は echo で表示できる。シェル変数、環境変数を両方表示する set でも表示できる。

# echo $TEST_ENV
test
# set | grep TEST_ENV
TEST_ENV=test

環境変数を表示するenv、printenv、export -p では表示されない

# env | grep TEST_ENV
# printenv | grep TEST_ENV
# export -p | grep TEST_ENV

環境変数に設定

# export TEST_ENV='test'

環境変数を表示する export -p env printenv で表示。echo set でももちろん表示。

# export -p | grep TEST_ENV
declare -x TEST_ENV="test"
# env | grep TEST_ENV
TEST_ENV=test
# printenv | grep TEST_ENV
TEST_ENV=test
# echo $TEST_ENV
test
# set | grep TEST_ENV
TEST_ENV=test

env コマンドの中で実行して変数定義。
env は env を呼びだしたシェルのシェル変数として定義する。
env を呼びだしたシェルの中で変数 TEST_ENV が上書きされている。
環境変数は変わらない。

# env TEST_ENV='test2' | grep TEST_ENV
TEST_ENV=test2
# env | grep TEST_ENV
TEST_ENV=test
# set | grep TEST_ENV
TEST_ENV=test
# printenv | grep TEST_ENV
TEST_ENV=test
# echo $TEST_ENV
test

環境変数の削除

# export -n TEST_ENV

環境変数は表示されない。

# export -p | grep TEST_ENV
# env | grep TEST_ENV
# printenv | grep TEST_ENV

シェル変数は export -p で削除されないので表示できる。

# echo $TEST_ENV
test
# set | grep TEST_ENV
TEST_ENV=test

シェル変数の削除

# unset TEST_ENV

シェル変数は表示されない

# echo $TEST_ENV
# set | grep TEST_ENV

シェル変数の上書き。

シェル変数を設定し、同じ変数名の環境変数に別の値を設定。

# TEST_ENV='test'
# echo $TEST_ENV 
test
# export TEST_ENV='test2'
# export -p | grep TEST_ENV
declare -x TEST_ENV="test2"

シェル変数が上書きされている。
export の引数 TEST_ENV='test2' でシェル変数が上書きされているため。

# echo $TEST_ENV 
test2
# set | grep TEST_ENV
TEST_ENV=test2

環境変数を削除しても上書きされたシェル変数は残る。

# export -n TEST_ENV
# export -p | grep TEST_ENV
# echo $TEST_ENV 
test2

下のコマンドでは TEST_ENV が上書きされない時とされる時がある。
パイプ処理で区切ったコマンドは子プロセスとして呼び出されているため、export は子プロセスのシェル変数を定義している?

# export TEST_ENV='test2' | export -p | grep TEST_ENV
declare -x TEST_ENV="test"
# export TEST_ENV='test2'
# export -p | grep TEST_ENV
declare -x TEST_ENV="test2"

参考
http://linux.just4fun.biz/?%E9%80%86%E5%BC%95%E3%81%8DUNIX%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%AE%E7%A2%BA%E8%AA%8D%28env%2C%20printenv%E3%81%AE%E9%81%95%E3%81%84%29

6
6
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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?