为什么 grep 有时会返回带有两个斜杠的目录?

Cho*_*tom 5 grep

我刚跑 grep -ri foo someDir/

我回来了

someDir//foo/bar/baz: onDelete() {

双正斜杠是否意味着它左侧的所有内容都在您提供给 grep 的 dir 参数中?

Bar*_*mar 6

运行命令时:

grep -r <pattern> <directory>
Run Code Online (Sandbox Code Playgroud)

它将所有文件名打印为<directory>/<filename>. 如果您在 的末尾添加斜杠<directory>,它将包含在其中,因此您最终会得到一个双斜杠。

代码可能足够聪明,可以注意到原始目录名何时以 结尾,/并在打印文件名时忽略它,但他们没有打扰。我认为它唯一的特殊情况是根目录,例如

grep -r pattern /
Run Code Online (Sandbox Code Playgroud)

将打印/foo/bar/baz而不是//foo/bar/baz. 这是因为 POSIX 指定将一系列斜杠等同于单个斜杠,只是开头的两个斜杠具有依赖于实现的含义(这是因为某些网络文件系统机制使用了类似 的语法//server/pathname)。请参阅Linux 如何处理多个连续的路径分隔符(/home////username//file)?