关于shell变量的继承总结
结论:
默认,父shell和子shell的变量是隔离的。
sh方式运行脚本,会重新开启一个子shell,无法继承父进程的普通变量,能继承父进程export的全局变量。
source或者. 方式运行脚本,会在当前shell下运行脚本,相当于把脚本内容加载到当前shell后执行,自然能使用前面定义的变量。
验证:在子shell中调用父shell普通变量
[root@gjt scripts]# echo $b [root@gjt scripts]# echo $a [root@gjt scripts]# b=gaga
[root@gjt scripts]# echo $b
gaga
[root@gjt scripts]# cat test1.sh
a=haha
echo "test1: $a"
echo "test1: $b"
sh /root/scripts/test2.sh
[root@gjt scripts]# cat test2.sh
echo "test2:$a"
echo "test2:$b"
[root@gjt scripts]# sh test1.sh
test1: haha
test1:
test2:
test2:
#执行过程解释:
sh test1.sh ==>重新启动一个子shell
a=haha ==>a变量赋值
echo "test1: $a" ==>输出:test1: haha
echo "test1: $b" ==>输出:test1: 因为子shell不会继承父shell的普通变量,所以$b为空
sh /root/scripts/test2.sh ==>重新启动一个子shell
echo "test2:$a" ==>输出:test2: 同上,$a为空
echo "test2:$b" ==>输出:test2: 同上,$b为空 [root@gjt scripts]# source test1.sh
test1: haha
test1: gaga
test2:
test2:
[root@gjt scripts]# echo $a
haha
#执行过程解释:
source test1.sh ==>在当前shell下执行脚本
a=haha ==>a变量赋值
echo "test1: $a" ==>输出:test1: haha
echo "test1: $b" ==>输出:test1: gaga 在运行脚本之前在终端定义了b变量。
sh /root/scripts/test2.sh ==>重新启动一个子shell
echo "test2:$a" ==>输出:test2: $a未定义
echo "test2:$b" ==>输出:test2: $b未定义 [root@gjt scripts]# echo $a ==>输出:haha,source test1.sh时定义了。
验证:在子shell中调用父shell普通变量
验证:在子shell中调用父shell定义的export全局变量
[root@gjt scripts]# echo $b [root@gjt scripts]# echo $a [root@gjt scripts]# cat test1.sh
export a=haha
echo "test1: $a"
echo "test1: $b"
sh /root/scripts/test2.sh
[root@gjt scripts]# cat test2.sh
echo "test2:$a"
echo "test2:$b"
[root@gjt scripts]# export b=gaga
[root@gjt scripts]# sh test1.sh
test1: haha
test1: gaga
test2:haha
test2:gaga #输出说明,父shell定义的全局变量可以传递给子shell以及子shell的子shell
验证:在子shell中调用父shell定义的export全局变量
[root@gjt scripts]# echo $b [root@gjt scripts]# echo $a [root@gjt scripts]# cat test1.sh
export a=haha
echo "test1: $a"
echo "test1: $b"
sh /root/scripts/test2.sh
[root@gjt scripts]# cat test2.sh
echo "test2:$a"
echo "test2:$b"
[root@gjt scripts]# export b=gaga
[root@gjt scripts]# sh test1.sh
test1: haha
test1: gaga
test2:haha
test2:gaga
[root@gjt scripts]# echo $a [root@gjt scripts]# #最后的$a输出为空,说明子shell运行结束后,其定义的全局变量和普通变量均自动销毁。
验证:在父shell中无法调用子shell定义的export全局变量
注意:测试过程中如果使用了source运行脚本,请退出终端或unset再进行其他测试,避免变量的值对其他验证有影响。
关于shell变量的继承总结的更多相关文章
- (转载)linux中shell变量
(转载)http://blog.csdn.net/zahuopuboss/article/details/8633891 为使shell编程更有效,系统提供了一些shell变量.shell变量可以保存 ...
- 【shell编程基础1】shell变量篇
Bash shell bash shell 是bourne shell 的升级版,“bourne again shell”.ubuntu的默认shell. 预备知识 1. "#!" ...
- Shell脚本编程(二):shell变量
定义变量 定义变量时,变量名不加美元符号($,PHP语言中变量需要),如: your_name="runoob.com" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程 ...
- linux 中的局部变量、全局变量、shell 变量的总结
系统局部变量和全局变量 一.变量分类局部变量和环境变量,局部变量只适用于当前shell,而环境变量是全局的,它适用于所有当前shell以及其派生出来的任意子进程,有些变量是用户创建的,其他的则是专用 ...
- shell变量与运算
shell变量与运算 @(0003 shell编程) 变量存在于内存中.假设变量str,设置或修改变量属性时,不带$号,只有引用变量的值时才使用$号.也就是说在内存中,标记变量的变量名称是str,而不 ...
- 二、Shell变量
类型 注释强变量 变量在使用前,必须事先声明,甚至还需要初始化 弱变量 变量用时声明,甚至不区分类型 变量的作用:用来保存变化的数据 变量名 名称固定,由系统设定或用户定义 变量值 根据用户设 ...
- Shell变量的作用域:Shell全局变量、环境变量和局部变量
Shell 变量的作用域(Scope),就是 Shell 变量的有效范围(可以使用的范围). 在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他 ...
- shell变量
定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...
- linux中shell变量$#,$@,$0,$1,$2的含义解释
linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...
随机推荐
- JS 设计模式四 -- 模块模式
概念 模块模式的思路 就是 就是单例模式添加私有属性和私有方法,减少全局变量的使用. 简单的代码结构: var singleMode = (function(){ // 创建私有变量 var priv ...
- SQL操作符、通配符等
一.通配符 常用模糊查询:% SELECT * FROM TB_Name WHERE FIELD LIKE pattern SELECT * FROM Persons WHERE name LIK ...
- Vue echarts
方式一.直接引入echarts 先 npm 安装 echarts npm install echarts --save // main.js import myCharts from './comm/ ...
- 深度学习识别CIFAR10:pytorch训练LeNet、AlexNet、VGG19实现及比较(二)
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com AlexNet在2012年ImageNet图像分类任务竞赛中获得冠军.网络结构如下图所示: 对CIFA ...
- centos7之zabbix监控mysql(mariadb)数据库
一.Zabbix3.2.6使用自带模板监控MySQL 添加zabbix_agent客户端方法:http://www.cnblogs.com/lei0213/p/8858269.html mysql服务 ...
- MAC 的ideal 修改 项目名称
在使用 ideal的时候 ,我拷贝了一个文件,想要修改项目的名称,改了qcs-regulation-hefei 但是 (1)我改了项目名称: (2)还改了 pom.xml 但是还是不行,来回切换不同的 ...
- Python视频人脸检测识别
案例 这里我们还是使用 opencv 中自带了 haar人脸特征分类器,通过读取一段视频来识别其中的人脸. 代码实现: 动图有点花,讲究着看吧: 如果是捕捉摄像头,只需要改变以下代码即可: c ...
- CBV源码分析
1 在views中写一个类,继承View,里面写get方法,post方法 2 在路由中配置: url(r'^test/', views.Test.as_view()),实际上第二个参数位置,放的还是一 ...
- VUE项目中使用mint-ui框架总结
针对PC端,element-ui可谓是首选了,UI体验效果很好. element-ui 框架官网:http://element.eleme.io/#/zh-CN/component/installat ...
- 关于使用stanfordcorenlp一直运行不报错的解决方法
一.问题描述: 最近在使用stanfordcorenlp时,遇到了我在运行时代码不报错但同时也没有结果的问题,等了很久也没有出结果.其实是很简单的一个步骤,但却花了好几天的时间都没有成功!网上更多的是 ...