我有一个非常简单的shell脚本名test.sh
:
[mylinux ~]$ cat test.sh
echo "a"
echo "${0}"
然而,当我source
它和sh
时,结果却完全不同:
[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
我如何理解这种现象?
我发现了真正的问题,即即使它们不是这样的文件test.sh
,我甚至可以执行source test.sh
来获得结果:
[mylinux ~]$ rm test.sh
[mylinux ~]$ source test.sh
array : x, y
0,x
1,x
对我来说这很奇怪......
答案 0 :(得分:3)
source
字符, /
会对其参数执行路径查找,因此保证sh test.sh
和source ./test.sh
运行代码时从当前目录中的文件,source test.sh
可能完全运行不同的脚本。 source test.sh
只有在./test.sh
首先找不到test.sh
时才会PATH
运行。
答案 1 :(得分:1)
当您运行source test.sh
时,不会创建新的shell,因此程序${0}
是bash。当您运行sh test.sh
时,bash会创建一个新shell,并将${0}
设置为脚本名称。