shell变量的一点总结

 下午研究了下source . 命令,做下总结:
假设有脚本 test.sh,内容(比较简单,能说明问题即可)如下:

#!/bin/bash
export str_1="hi"
str_2="hello"
echo $str_1
echo $str_2

I.在当前shell环境中执行 ./test.sh  得到:
hi
hello
结果在意料中。在当前shell中再执行:echo $str_1 $str_2
nothing,什么都没有输出,why?

II.在当前shell环境中执行 source test.sh or . test.sh 得到
hi
hello
结果在意料中。在当前shell中再执行:echo $str_1 $str_2
输出 hi hello, why?
执行bash,再起一个shell,执行:echo $str_1 $str_2
输出 hi, why?

为什么会这样?
A问题I:
在执行./test.sh,会新起一个进程,str_1,str_2都属于这个进程里的变量,当进程执行完后,这俩变量也被销毁了。再在当前shell中,想得到这俩变量的值,就不可能啦。
A问题II:
使用source or. 执行脚本,会在当前shell进程下执行,既然是当前进程,echo时,当然是可以得到变量的值。在使用bash命令新起shell后,作为子shell,共享父shell的环境变量,export str_1="hi", export让str_1以环境变量的身份存在,于是乎在子shell中,也是可以得到它的值,str_2做为父shell的局部变量,在子shell中当然不存在,打印为空。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值