父脚本中中export的变量在子脚本中是否有效?
子脚本中中export的变量在父脚本中是否有效?
现在有两个脚本。父脚本1.sh和子脚本2.sh
父脚本1.sh中有变量ERRORCODE=100,
父脚本1.sh中调用了2.sh。
子脚本2.sh中echo $ERRORCODE,
此时运行1.sh 会发现输出为空值。因为父脚本1.sh中的变量ERRORCODE对子脚本2.sh是不可见的。
为了解决这个问题,只需要在父脚本中将ERRORCODE=100前面加上export,即写为 export ERRORCODE=100.
现在,测试两点:
(1)如果子脚本2.sh还有子脚本3.sh,那么在父脚本中export的变量ERRORCODE=100,是否对孙脚本3.sh依然可见。
(2)如果定义变量在子脚本中,此变量是否对父脚本课件?
[测试1] 父脚本中export的变量是否对子脚本、孙脚本可见
[user1~]$ cat 1.sh
export ERRORCODE=100
echo "======="
sh 2.sh
echo "======="
sh 3.sh
[user1~]$ cat 2.sh
echo "2:"$ERRORCODE
sh 3.sh
[user1~]$ cat 3.sh
echo "3:"$ERRORCODE
执行 sh 1.sh,显示情况如下:
=======
2:100
3:100
=======
3:100
[结论] 父脚本中export的变量对它的子脚本和它的孙脚本依然可见。
测试2 子脚本的变量是否不对父脚本可见
[user1~]$ cat 3.sh
echo "3:"$ERRORCODE
ERRORCODE=1
echo "4:$ERRORCODE"
[user1~]$ cat 2.sh
echo "2:"$ERRORCODE
sh 3.sh
[user1~]$ cat 1.sh
export ERRORCODE=100
echo "======="
sh 2.sh
echo "======="
sh 3.sh
echo "======="
echo "5:$ERRORCODE"
执行1.sh后的显示情况:
[user1~]$ sh 1.sh
=======
2:100
3:100
4:1
=======
3:100
4:1
=======
[结论] 子脚本的变量定义不对父脚本可见,即使子脚本修改了父脚本中export出的变量,也不对父脚本可见。