gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:20:18 26 4
gpt4 key购买 nike

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

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

但是,当我sourcesh 时,结果完全不同:

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

我看不懂source test.sh的结果,而且,我把test.sh改名后,结果也变了:

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

如何理解这种现象?

顺便说一句,第二个奇怪的结果只存在于我的一个远程 linux session 中,在我的本地 linux 系统中,一切正常。那么肯定和环境有关,我能做些什么来找到根本原因呢?

我发现了真正的问题,就是即使他们没有这样的文件test.sh,我什至可以执行source test.sh来得到结果:

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

这对我来说很奇怪......

最佳答案

如果参数不包含任何 / 字符,

source 将对其参数执行路径查找,因此当 sh test.shsource ./test.sh 保证从当前目录中的文件运行代码,source test.sh 可能运行完全不同的脚本。 source test.sh 只会运行 ./test.sh 如果它在你的 PATH test.sh首先。

关于linux - 为什么 `sh myscript` 和 `source myscript` 之间的 $0 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44438567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com