Shell与子Shell中环境变量传递问题

在shell编程中为了程序尽可能模块化与简洁,除了可以用函数的方式,另一种常用方法就是将不同的功能单独写在不同的脚本文件中。在父脚本调用子脚本的过程中,往往会涉及将父脚本中的变量传入子脚本中,或者将子脚本的变量传递到父脚本中,这里就会经常出现一些令人困惑的问题。要么父脚本的变量传递不进去子脚本,要么子脚本中的变量父脚本也获取不到。这里对父脚本调用子脚本,及其变量传递问题做一些总结。

父脚本与子脚本示例代码如下,在父子脚本中分别export一个变量。然后在父脚本中分别尝试三种不同的调用方式,在子脚本中获取父脚本的变量,在父脚本中获取子脚本中的变量。

三种不同的调用方式对应结果如下:

对这三种方式做个总结:

1、./子脚本,此时,会fork一个子shell来运行此脚本,会继承来自父shell的环境变量(注意必须用export声明,否则无法传递),但是子shell中的环境变量不会返回到父shell中。【两个进程】

2、.[空格]./子脚本,此时,相当于函数中的内联函数(inline)的概念,子脚本中的内容会在此处通通展开,此时相当于在一个shell环境中执行所有的脚本内容,所以,此时父子脚本中任何变量都可以共享(注意定义变量的顺序,在使用前声明)。【一个进程】

3、exec ./子脚本,此时,相当于将接下来要执行的进程下文进行了替换,直接用子脚本中的内容替换了原来的进程内容,同时会继承之前的环境变量,原来的执行内容相当于不存在了,直接执行完此子脚本,整个流程就结束了。【一个进程】

以上父子脚本调用的执行流程可以用pstree命令加以验证。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值