有两个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变量暴露到父进程中;