次の2つのスクリプトがあります。
「scr1.sh」
#!/bin/sh
func_in_scr1()
{
echo func_in_scr1 var is $var
}
var=7645
func_in_scr1 &
( func_in_scr1 )
./scr2.sh
「scr2.sh」
echo in scr2 var is $var
出力は次のとおりです。
- func_in_scr1 変数は 7645 です
- func_in_scr1 変数は 7645 です
- scr2のvarは
質問:
- scr1.sh の関数を bg およびサブシェルで実行すると、$var の値にアクセスできました。
- ただし、scr2.sh は $var の値にアクセスできませんでした。
サブプロセス (子プロセス) はエクスポートされた変数にのみアクセスでき、エクスポートされていない変数にはアクセスできないという印象を受けていたので、#1 には特に驚きました。
誰かがこの結果を説明できますか?