在路径中,您可以使用相对路径和绝对路径。
/
: 根目录./
: 当前目录../
: 父目录
但是,当您不使用前导斜杠时,例如,cd path/to/dir
它就像您在使用cd ./path/to/dir
.
有区别吗?./
如果不是,那么没有它时它的工作原理是什么?
在路径中,您可以使用相对路径和绝对路径。
/
: 根目录./
: 当前目录../
: 父目录但是,当您不使用前导斜杠时,例如,cd path/to/dir
它就像您在使用cd ./path/to/dir
.
有区别吗?./
如果不是,那么没有它时它的工作原理是什么?
标准文件访问没有区别。像这样的路径
./foo
是有效的,因为.
作为路径组件是有效的,并且没有必要故意使它们无效,因此即使您不需要使用变体,它们仍然有效./
。具体来说有一个区别:像和
cd
这样的路径在 cd 到它们时不能保证引用当前目录——shell 将另外尝试使用解析它们,而显式锚定的路径 using不会这样做。这与可执行文件的 $PATH 查找非常相似。foo
foo/bar
$CDPATH
./
其他程序也可能对裸文件名有不同的处理方式(通常类似地对不包含的名称执行路径搜索
/
)。作为一个不同的例子,“systemd-tmpfiles foo.conf”将在标准系统目录中寻找 foo.conf——而不是在当前目录中。使用的能力
./
最终会以其他方式发挥作用。特别是,因为这样的路径以 开头.
,这意味着它不-
以or或其他可能的特殊字符开头@
;例如,您可以 rm 之类的路径./--help
。(它对于编写连接路径的通用代码也很有用,例如,
$dir/foo
如果将 $dir 设置为.
,它仍然可以按预期工作,而无需为当前目录设置特殊情况。)当您使用 时
./
,您声明您引用的是当前文件夹中的文件。如果不使用path
它,您可能不打算从当前文件夹执行命令。在早期的 Linux 时代,开发人员担心恶意软件会将其程序伪装成当前文件夹中的标准 Linux 应用程序。例如,如果您使用了
su
并且它被发现在当前文件夹中并窃取了您的登录名和密码。.\
作为预防措施,一些 Linux 发行版仍然不接受从当前文件夹执行程序而不在可执行文件名称前添加。(我被咬过不止一次。)