Shell编程中的变量作用域

有两个shell脚本文件:

a.sh

name=Tom
echo $name
./b.sh

b.sh

echo "name in b.sh:"$name

运行./a.sh时输出结果:

[root@centos ~]# ./a.sh
Tom
name in b.sh:

可见,虽然b是a的子进程,但是a中定义的变量在b中是不可见的。

如果想要在b中可以访问,需要用expert来定义:

export name=Tom
echo $name
./b.sh
[root@centos ~]# ./a.sh 
Tom
name in b.sh:Tom

即用export定义的变量可以在进程及其子进程中访问到。

如果想要在父进程中访问子进程的变量应该怎么办呢?

需要export和source配合使用:

a.sh

export name=Tom
echo $name
source ./b.sh
echo "name2 in a:"$name2

b.sh

echo "name in b.sh:"$name
export name2=Jack
echo "name2 in b.sh:"$name2

这样a中就可以访问到了:

[root@centos ~]# ./a.sh
Tom
name in b.sh:Tom
name2 in b.sh:Jack
name2 in a:Jack

 总结

export可以让子进程也能访问到;

source可以让子进程中的export变量暴露到父进程中;

原文地址:https://www.cnblogs.com/at0x7c00/p/7978178.html