直接看例子
[root@localhost test]# cat b2.sh
echo b2
exit 1
[root@localhost test]# cat c2.sh
source ./b2.sh
return $?
[root@localhost test]# sh c2.sh
b2
[root@localhost test]#
[root@localhost test]#
[root@localhost test]# cat b1.sh
echo b1
exit 1
[root@localhost test]# cat c1.sh
sh ./b1.sh
echo $?
[root@localhost test]# sh c1.sh
b1
1
[root@localhost test]# cat b.sh
echo hhh
return 1
You have new mail in /var/spool/mail/root
[root@localhost test]# cat c.sh
sh ./b.sh
echo $?
[root@localhost test]# sh c.sh
hhh
./b.sh: line 2: return: can only `return' from a function or sourced script
1
[root@localhost test]#
总结
- 在脚本c.sh中sh ./b.sh ,则会重新创建一个shell进程,环境变量可能不同;
- 在脚本c.sh中source ./b.sh,此时执行b.sh待shell进程与执行c.sh的shell进程是同一个,环境变量是一样的
- return只能在函数中或者是被source 的脚本中使用