変数の設定
最初、シェル変数、環境変数の定義はない
# 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"