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

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

我刚刚跑了grep -ri foo someDir/

我回来了

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

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

答案1

当您运行命令时:

grep -r <pattern> <directory>

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

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

grep -r pattern /

将打印/foo/bar/baz而不是//foo/bar/baz.这是因为 POSIX 指定斜杠序列被视为等同于单个斜杠除了开头的两个斜杠具有与实现相关的含义(这是因为某些网络文件系统机制使用了类似的语法//server/pathname)。看Linux如何处理多个连续的路径分隔符(/home////用户名///文件)?

相关内容