shell中exit与return以及source与sh的区别

本文通过三个实例详细对比了在Shell脚本中使用'source'与'sh'命令执行子脚本的区别,解释了环境变量如何在不同执行方式下受到影响。深入探讨了'return'命令的正确用法及其限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接看例子

  • 实例1
[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]# 

  • 实例2
[root@localhost ~]# cat a.sh
sh ./b.sh
echo 'end a'
[root@localhost ~]# cat b.sh
echo 'b'
exit 1
[root@localhost ~]# sh a.sh
b
end a
  • 实例3
[root@localhost ~]# cat a.sh
source ./b.sh
echo 'end a'
[root@localhost ~]# cat b.sh
echo 'b'
exit 1
[root@localhost ~]# sh a.sh
b

总结

  • 在脚本c.sh中sh ./b.sh ,则会重新创建一个shell进程,环境变量可能不同;
  • 在脚本c.sh中source ./b.sh,此时执行b.sh待shell进程与执行c.sh的shell进程是同一个,环境变量是一样的
  • return只能在函数中或者是被source 的脚本中使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值