我在 shell 中玩耍并输入 ./. 我去以下输出:
bash: ./: Is a directory
Run Code Online (Sandbox Code Playgroud)
看起来像“./”检查是否存在具有给定名称的目录。我试图找到这方面的文档,看看我的理解是否正确,但在网上找不到任何东西。谁能给我解释一下这个?
Bash 手册中可能找不到对此的一般定义,而是POSIX 规范(路径名解析部分):
特殊文件名点应指代其前任指定的目录。
那么,如果我们只有 ,前身是什么.
?我强调了重要的部分:
如果路径名不以斜杠开头,则路径名的第一个文件名的前任将被视为进程的当前工作目录
还,
包含至少一个非斜杠字符并以一个或多个尾部斜杠结尾的路径名应被解析为好像在路径名后附加了一个点字符 ('.')
因此,当您键入时,./
它会解析为./.
,它基本上指向您当前的工作目录。当您在 shell 中键入内容并点击 时Enter,shell 将尝试将第一部分作为命令执行。(基本上是第一组字符,直到第一个空格。)
没有名为 的命令或可执行文件./.
,因此它会失败并告诉您./
“是一个目录”。有趣的是,.
是一个命令(它也是一个内置命令source
),所以当你输入时.
你会得到:bash: .: filename argument required
。