./
我经常看到,并且在某种程度上采用了自己的做法,在 shell 脚本中将相对路径放在前面。但有没有一种情况
source ./foo/helper.sh
和
source foo/helper.sh
实际上会产生不同的结果吗?这个“约定”有什么道理吗?
答案1
source ./foo/helper.sh
source foo/helper.sh
这两者应该是等价的。但这两个不是,无论如何也不在 Bash 中:
source ./helper.sh
source helper.sh
原因是,对于普通文件名,source
将首先查看目录$PATH
,但对于包含斜杠的文件名,则不会发生这种情况。如果helper.sh
当前目录和 in 中都有 a $PATH
,则第一个将查找前者,第二个将查找后者。
类似的考虑可能适用于其他程序,因此 write./foo
而不是foo
明确表示您指的是当前目录中的文件,而不是通过其他方式查找的文件。