さきにまとめ
- シェル変数は別プロセスには引き継げない
- 環境変数は親プロセスから子プロセスへ引き継げる
- 子プロセスから親プロセスへ引継ぐ場合は、親プロセス側で「source」コマンドを実施する
親プロセスから子プロセスへの引継ぎ
親プロセスでシェル変数 hoge 作成
$ hoge='hoge'
$ echo $hoge
hoge
こういうシェルがあるとして、
$ cat child.sh
#!/bin/sh
echo $hoge
実行してもシェル変数は子プロセスでは表示されない
$ ./child.sh
# 何も表示されない
そのかわりシェル変数を環境変数にすると、
$ export hoge
子プロセスでも表示される
$ ./child.sh
hoge # 表示される
子プロセスから親プロセスへの引継ぎ
子プロセスで環境変数 fuga を作成
$ cat child.sh
#!/bin/sh
echo $hoge
fuga='fuga'
export fuga
そのままだと親プロセスでは表示されない
$ echo $fuga
# 何も表示されない
そこで source コマンドを実行
$ source child.sh
hoge
子プロセスで作成した環境変数が親プロセスでも表示される
source コマンドを実行することで、child.sh の内容が同じプロセス上で実行されることになるので、ただしく表示される
$ echo $fuga
fuga