![在路径中使用 ./ 对于常见的 Unix 工具有意义吗?](https://linux22.com/image/150599/%E5%9C%A8%E8%B7%AF%E5%BE%84%E4%B8%AD%E4%BD%BF%E7%94%A8%20.%2F%20%E5%AF%B9%E4%BA%8E%E5%B8%B8%E8%A7%81%E7%9A%84%20Unix%20%E5%B7%A5%E5%85%B7%E6%9C%89%E6%84%8F%E4%B9%89%E5%90%97%EF%BC%9F.png)
多年来,我./
越来越多地在绝对路径前面使用。例如:
mv ./file /target/
rm ./something/else
# compared to
mv file /target/
rm something/else
我在网络上的更多地方看到过它,这可能就是我适应使用它的原因。我似乎无法理解为什么要这样做,并且一直想知道一段时间。也许这是一个源于直接调用本地二进制文件的坏习惯:./a.out
./
上面的 shell 示例中的内容是否已过时?有什么理由./
使用一些案例?使用它是否可以使路径更加明确?
答案1
明确指定某些内容位于当前目录中并不是一个坏习惯,特别是当该内容是脚本或程序时(在这种情况下的替代方法是.
在您的$PATH
通常是被认为存在安全风险)。
在某些情况下,./
无论您是否需要,您都会在路径名的开头添加它。例如,从向下find
搜索时找到的路径名将.
始终以 为前缀./
。
在其他情况下,文件名可能会干扰实用程序的选项,例如尝试删除-f
使用
rm -f
使用
rm ./-f
会解决这个问题(./-f
不会被视为 的选项rm
),就像
rm -- -f
do(--
表示任何命令行选项的结束)。
另请注意,shell 全局变量可能*
会扩展为带有破折号开头的文件。因此,循环./*
比循环更安全*
(除非您使用--
从提供给实用程序的选项中分隔未知文件名)。
因此,在路径名中使用是一个好主意./
,特别是当路径名存储在变量中并且来自脚本外部的某个源时。