Bashのシェルスクリプト内で呼び出した別のシェルは呼び出し元の変数の影響を受けるか?

こんにちは、minoruです。

UbuntuでBashのシェルスクリプトを使っていて、ふと疑問に思ったんですが、Bashのシェルスクリプトで、仮にtest.shの中でtest2.shを実行している場合、両方のスクリプトに変数Aが存在した場合、問題が発生するのだろうか?

#test.sh

a="aiueo"
bash test2.sh

#test2.sh

a="12345"
echo $a

このような場合、aiueoと12345のどちらが表示されるかと言うと後者の12345が表示される。

bashの場合、シェルスクリプト内で定義された変数はローカル変数として扱われます。つまり、test.sh内で定義された変数Aと、test2.sh内で定義された変数Aは別々の変数として扱われます。つまり、問題が発生することはありません。ただし、test.shで定義した変数aをtest2.shで参照したい場合は、環境変数として定義する必要があります。

しかし、環境変数として定義すると、まったく関係のないプログラムにまで影響が及ぶ恐れがあるので、普通は呼び出す側のスクリプトで予め変数の内容をファイルに入れ、呼び出された方でそのファイルを参照して変数に入れる…と言う方法が使われます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする