从这个图看下env和set的本质区别
- env是用户变量,可被子bash(fork的进程)继承
- set是bash本地变量,无法被子bash继承
- 本地变量包含了所有的环境env变量
本bash export name=”maotai”,则在子bash里也会env|grep name,存在, set|grep name也存在
sh 1.sh
,开子bash执行完毕脚本
name="maotai"
$ cat 1.sh
#!/bin/bash
echo $name
# 未输出任何
source 1.sh
,不开启子bash: source不会开子bash
name="maotai"
$ cat 1.sh
echo $name
# 输出maotai
exec,不会开子bash,会把进程生命赋给要执行的命令
exec命令在执行时会把当前的shell process关闭,然后换到后面的命令继续执行bash shell的命令分为两类:外部命令和内部命令
参考(很经典):http://www.cnblogs.com/zhaoyl/archive/2012/07/07/2580749.html
http://blog.youkuaiyun.com/clozxy/article/details/5818465