在 zsh 中包含破折号的 globbing 文件名中的解析错误

Parse error in globbing filenames containing dashes in zsh

当我在包含目录 - Java Code 的文件夹中 运行 mdls -name kMDItemFSName -name kMDItemDateAdded -raw * 时,出现以下错误:

mdls: unrecognized option `- Java Code'

我该如何解决这个问题?我尝试使用 "*",但它根本没有 glob。

问题是因为其中一个目录中的 - 选项。通常命令行标志在 - 之后给出。文件夹名称 -Java Code 被视为它不喜欢的 mdls 命令的标志之一。通常我们通过提供 -- 来提供命令行标志分隔符的结尾,shell 意识到不再需要命令行标志。

mdls -name kMDItemFSName -name kMDItemDateAdded -raw -- *

这样,因为我们发出命令行标志已完成的信号,所以应该正确解析包含前导 - 的文件夹名称。

该问题是一个经常发生的问题,可以通过一个简单的 mv 命令简单地重现并创建一个包含 - 的文件,当尝试移动该文件时,该命令会失败。它需要通过 mv --

来修复

大多数 shell 内置命令和 GNU 工具都支持此选项。 POSIX 也推荐这个。从他们的指南之一中看到它。参见 POSIX Utility Conventions - Guideline 10