【问题标题】:Parse error in globbing filenames containing dashes in zsh在 zsh 中包含破折号的通配文件名中的解析错误
【发布时间】:2019-01-10 23:25:42
【问题描述】:

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

mdls: unrecognized option `- Java Code'

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

【问题讨论】:

    标签: macos shell terminal zsh mdls


    【解决方案1】:

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

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

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

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

    大多数 shell 内置命令和 GNU 工具都支持此选项。 POSIX 也建议这样做。从他们的指导方针之一中看到它。见POSIX Utility Conventions - Guideline 10

    【讨论】:

    • 哦,你是对的。 ??‍♀️我忘了--。如果有问题的实用程序不支持--,该怎么办?我的意思是,为什么没有类似于“*”的东西?或者有吗?
    • 一个有趣的说明是没有-Java Code,而是- Java Code,这显然不是一个选项...
    • @HappyFace:大多数命令都应该支持它。 POSIX 也定义了它
    • @HappyFace glob 扩展的结果不受分词的影响,因此mdls 得到一个参数- Java Code,而不是三个参数-JavaCode。任何以- 开头的参数都被视为一个选项,无论- 后面是否跟一个空格。
    猜你喜欢
    • 2017-12-18
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2012-08-31
    • 2016-03-18
    • 2015-03-27
    相关资源
    最近更新 更多