微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 为什么`sh myscript`和`source myscript`之间的$0不同?

我有一个非常简单的shell脚本名称test.sh:

[mylinux ~]$cat test.sh
echo "a"
echo "${0}"

但是,当我采购它时,结果却完全不同:

[mylinux ~]$sh test.sh 
a
test.sh
[mylinux ~]$source test.sh 
array : x, y
0,x
1,x

我无法理解源test.sh的结果,并且在我更改test.sh的名称后,结果也发生了变化:

[mylinux ~]$mv test.sh a.sh
[mylinux ~]$source a.sh 
a
-bash

我怎么能理解这种现象?

BTW,第二个奇怪的结果只出现在我的一个远程linux会话中,在我的本地linux系统中,一切正常.所以肯定它与环境有关,我能做些什么才能找到根本原因?

我发现了真正的问题,即即使它们不是这样的文件test.sh,我甚至可以执行source test.sh来获得结果:

[mylinux ~]$rm test.sh 
[mylinux ~]$source test.sh
array : x, y
0,x
1,x

这对我来说很奇怪……

解决方法:

如果参数不包含任何/字符,source会对其参数执行路径查找,因此当sh test.sh和source ./test.sh保证从当前目录中的文件运行代码时,source test.sh可能会完全运行不同的脚本. source test.sh只会在你的PATH中找不到test.sh时运行./test.sh.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐