LoginSignup
4
5

More than 5 years have passed since last update.

【解決済】bashのコマンドラインで指定する変数の挙動が怪しい

Last updated at Posted at 2017-03-03

問題発生! 問題発生!

環境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は親プロセスで動くから環境変数を参照できないということだろうか??

ここまで予想は立てたけれど、本当かどうかわからない・・・
詳しい方教えていただけないでしょうか・・・

4
5
6

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
4
5