变量在shell脚本间的传递

前几篇文章中已经介绍过局部变量和环境变量的含义,接下来我们来拓展下,看看变量怎样实现在shell脚本
中的传递shell脚本其实是用当前shell的子shell去执行的,所以在shell脚本中定义的普通变量只适用于当前
shell的子shell环境,也就是说在当前shell环境中不适用,也不适用于这个shell脚本的子shell。
在shell脚本中定义的环境变量可以传承给它的子shell,但是也不能传递给当前shell(不能逆向传递)
如果在一个脚本中需要执行另一个脚本,并且运用其中的变量,改如何申明变量呢,我们来看一个例子:
/root/test1.sh内容如下:
#!/bin/bash
aaa=yuanfaxiang
echo "test1:$aaa"

/root/test2.sh内容如下:
#!/bin/bash
/root/test1.sh
echo "test2:$aaa"
执行test2.sh结果如下:
[root@centos ~]# sh test2.sh
test1:yuanfaxiang
test2:
从结果可以看出test1.sh没有把变量aaa的值传递给test2.sh

我们把test2.sh改成:
#!/bin/bash
source /root/test1.sh
echo "test2:$aaa"
执行test2.sh结果如下:
[root@centos ~]# sh test2.sh
test1:yuanfaxiang
test2:yuanfaxiang
结果显示test2.sh继承了test1.sh中定义的变量aaa。
原因分析:在第一次执行test2.sh时,test1.sh被作为了test2.sh的子shell来执行,其中定义的变量只
在test1.sh中起效,不能逆向传递到test2.sh中;而在第二次执行中,采用source来执行test1.sh,意思
是直接把test1.sh在当前的test2.sh中执行,没有作为子shell去执行,test1.sh中定义的变量,就影响
到了test2.sh。

如果我们再建一个test3.sh
#!/bin/bash
echo "test3:$aaa"

把test2.sh改成:
#!/bin/bash
source /root/test1.sh
echo "test2:$aaa"
/root/test3.sh
执行test2.sh:
[root@shenji ~]# sh test2.sh
test1:yuanfaxiang
test2:yuanfaxiang
test3:
结果显示test3.sh没有继承test1.sh中申明的变量,因为source /root/test1.sh只是让test1.sh
中的变量在test2.sh中生效,aaa毕竟还是个普通局部变量,并不能被test3.sh这个子shell所继承,
所以我们可以想到环境变量,把aaa变成test2.sh这个脚本的环境变量,让test2.sh的子进程也能继承。

将test1.sh改成:
#!/bin/bash
export aaa=yuanfaxiang
echo "test1:$aaa"
执行test2.sh后有如下结果:
[root@shenji ~]# sh test2.sh
test1:yuanfaxiang
test2:yuanfaxiang
test3:yuanfaxiang
在test1.sh中声明了环境变量也就是全局变量,在test2.sh中用source执行test1.sh,将变量带到了
test2.sh中,并使之成为test2.sh执行过程中的环境变量,可以被test2.sh的子进程继承,起到了顺向
传递效果。
 
转载自:

变量在shell脚本间的传递

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值