shell变量的一点总结

来源:互联网 发布:pp软件源 编辑:程序博客网 时间:2024/06/05 17:05
 下午研究了下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中当然不存在,打印为空。

0 0