問題発生! 問題発生!
環境RHEL6にて、これらを打った時のコマンドの結果が違った。
$ test=1 echo $test
何も表示されない
$ test=1 ./test.sh (echo $testが書かれてるbashスクリプト)
1と表示される
これは一体なぜ?
理由
$ test=1 env | grep test
test=1
どうやらtestはenvを実行したプロセス内では環境変数
のようだ。
環境変数であればtest=1 ./test.sh
を実行した時に、子プロセスであるtest.sh
の中でecho $test
が成功するのも当然。(環境変数は子プロセスに引き継がれる)
では、なぜこれは何も表示しないのだろうか?
$ test=1 echo $test
echoが環境変数となったtest
を参照できそうなのに…。
envができたのにechoお前はなぜ駄目なんだ
予想
echo だと失敗する…? もしかしてこいつbash
のビルトインコマンドだからでは??
もしかしてビルトインコマンドは実行時のシェルで起動される??
[envのケース(ps fの結果)]
bash
\_ env ← envはforkされ子プロセスとして表示される
[echoのケース(ps fの結果)]
bash ← ここで実行される??
つまり、envを叩いた時は子プロセスに環境変数が定義されるのでenvが参照でき、echoを叩いた時は子プロセスに環境変数が定義されるけど、echoは親プロセスで動くから環境変数を参照できないということだろうか??
ここまで予想は立てたけれど、本当かどうかわからない・・・
詳しい方教えていただけないでしょうか・・・