linux实现父子变量,Linux 父子Shell

重点看看:子shell 嵌套模式

shell调用脚本的模式说明

在主脚本中嵌套脚本的方式有很多,常见的为fork、exec、source三种模式,这三种调用脚本的方式有一定的区别。

fork模式调用脚本知识

fork模式是最普通的脚本调用方式,及直接在父脚本里面用“/bin/bash /directory/script.sh”来调用脚本,或者在命令行中给script.sh脚本文件设置执行权限,然后使用/directory/script.sh来调用脚本。

使用上述方式调用脚本的时候,系统会开启一个SubShell(子shell)执行调用的脚本,SubShell执行的时候ParentShell还在,SubShell执行完毕后返回到ParentShell。最后的结论是SubShell可以从ParentShell继承环境变量,但是默认情况下SubShell中的环境变量不能带回ParentShell。

执行方式说明:

/directory/script.sh #<== 对脚本赋予执行权限,直接执行脚本。

/bin/bash /directory/script.sh #<== 在不赋予执行权限时,利用执行解释器执行

exec模式调用脚本

exec模式与fork模式调用脚本的方式不同,不需要新开一个SubShell来执行被调用的脚本。被调用的脚本与父脚本在同一个shell内执行,但是使用exec调用一个新脚本以后,父脚本中的exec执行之后的脚本内容就不会再执行了,这就是exec和source的区别。

执行方式说明:

exec /directory/script.sh

source模式调用脚本

source模式与fork模式的区别是不会新开一个SubShell来执行被调用的脚本,而是在同一个shell中执行,所以在被调用的脚本中声名的变量和环境变量都可以在主(父)脚本中获取和使用。

source模式与exec模式相比,最大的不同之处是使用source调用一个新脚本以后,父脚本中source命令行之后的内容在自脚本执行完毕后依然会被执行。

执行方式说明:

source /directory/script.sh #<== 使用source不容易被误解,而“.”和“./”相近,容易被误解。

. /directory/script.sh #<== “.”和source命令的功能是等价的。

https://blog.csdn.net/lwj457700209/article/details/99600570

根据变量的生效范围等标准划分下面变量类型:

set:查看所有变量(全局变量,局部变量还有函数)

1.局部变量(标准变量,普通变量):生效范围为当前shell进程---当前会话(session);对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效

echo $$:当前进程编号(4496)

echo $PPID:父进程编号(4272)

2.环境(全局)变量:生效范围为当前shell进程及其子进程(export=declare -x|env命令可以查看系统中环境变量)

第一种定义方法:name=mage------export name

第二种定义方法:export name=mage

第三种定义方法:declare -x name=mage

3.本地变量:生效范围为当前shell进程中某代码片断,通常指函数

4.位置变量:

math?formula=1%2C2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数

5.特殊变量:

math?formula=%3F%2C0,

math?formula=*%2C@,

math?formula=%23%2C%24%24%20%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC%EF%BC%9Aname%3D%E2%80%98value%E2%80%99%20%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E5%BC%95%E7%94%A8value%3A%20(1)%20%E5%8F%AF%E4%BB%A5%E6%98%AF%E7%9B%B4%E6%8E%A5%E5%AD%97%E4%B8%B2%3B%20name%3D%E2%80%9Croot%22%20(2)%20%E5%8F%98%E9%87%8F%E5%BC%95%E7%94%A8%EF%BC%9Aname%3D%22USER"

(3) 命令引用:name=COMMAND name=

math?formula=(COMMAND)%20%E5%8F%98%E9%87%8F%E5%BC%95%E7%94%A8%EF%BC%9A{name} $name

"":弱引用,其中的变量引用会被替换为变量值

'':强引用,其中的变量引用不会被替换为变量值,而保持原字符串

显示已定义的所有变量:set

删除变量:unset name

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值