您的位置:首页 > 运维架构 > Shell

BASH命令和SHELL脚本总结(16)父脚本中export的变量在子脚本中的可见性测试

2013-04-15 13:21 686 查看
父脚本中中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出的变量,也不对父脚本可见。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: