Peacoc
资 讯  首 页  定 制  站 点  杂 烩  生 活  




【原创】关于shell中变量作用域的思考
发布于 2011-8-27 23:35:55

执行一个shell脚本会在当前shell中派生一个子shell去执行任务。同理,如果一个shell脚本中调用另一个shell,也是会在执行到子shell这一步的时候再次派生一个子shell去处理脚本。例如a.sh脚本有如下信息:

[code="bash"]
#!/bin/bash
echo $$
./b.sh
[/code]

b.sh中有:

[code="bash"]
#!/bin/bash
echo $$
[/code]

执行a.sh会发现输出两行不同的进程ID,验证了每个sh在执行的时候会派生一个子shell去执行任务。

在脚本之间调用我们或许会遇到变量之间的调用关系,这里我们需要注意一下几个场景的应用:

场景1, 当前shell中创建一个变量传递给当前脚本派生的子shell,例如:

a.sh

[code="bash"]
#!/bin/bash
a="TEST"
./b.sh
[/code]

b.sh

[code="bash"]
#!/bin/bash
echo $a
[/code]

这时会发现在b.sh中是无法正常获取到a的变量值的,那么我们可以利用export命令或者set -a命令来使当前shell的变量激活到派生的子shell中。

我们只需要在a.sh中加入

[code="bash"]
#!/bin/bash
export a="TEST"
[/code]

或者

[code="bash"]
#!/bin/bash
set -a
a="TEST"
[/code]

 

场景2,派生的子shell中的变量在当前父shell中使用,例如:

a.sh

[code="bash"]
#!/bin/bash
./b.sh
echo $b
[/code]

b.sh

[code="bash"]
#!/bin/bash
b="TEST"
[/code]

我们来执行a.sh会发现输出的b变量为空。那么我们可以使用source命令或者.(点号)来激活子shell中的变量使其能在父shell中使用。

我们只需要修改a.sh,在调用b.sh前加上特殊命令或字符即可,例如:

[code="bash"]
#!/bin/bash
. ./b.sh
#或者
source ./b.sh
[/code]



相关关键词:作用,思考,变量,关于,原创
上一篇:鸵鸟特别的睡眠模式
下一篇:Video: Google+ now lets you ignore people
查看详情 | 原文 | leeon | 分享未来
【原创】关于shell中变量作用域的思考 相关评论
查看更多评论
© PEACOC
广告
看过本文的还看过
暂时没有
热门文章
Twitter元老批评科技新闻界:滥用科技公司概念
汤镇宗女儿参加港姐二轮面试 获父亲支持
千元智能机集体爆发:国产品牌获重生机会
拆解富士X100相机
悲剧啊:傻X父母让孩子在洗衣机了坐了一分半钟的“过山车”
26岁成都男生成麻省理工网站封面人物
摩托罗拉移动部分手机侵犯微软专利禁止入美
Facebook上市 SNS股均受挫 人人跌21%
悲哀 以苹果为主题的展会不能叫“苹果展览会”
报告称Facebook IPO应与广告商维持好关系
链接
互动工具
 
WAP手机版
联播你我 - Peacoc 联播代码
订阅数统计图标
网站RSS申请收录
 
聚合专题
 
科技新闻圈
 
链接网站
 
查看链接网站



搜索风云榜 | 关于我们 | 收录 | 订阅图标 | 联播 | 手机版
京ICP备05022886号