如何在 Zsh 中禁用 URL 参数的通配?

Len*_*oyt 5 zsh

我只是想使用 下载 YouTube 视频youtube-dl,但是,zsh将问号?(它将 URL 的查询部分分开)解释为通配符通配符(匹配任何单个字符),因此它会中止命令并显示以下错误消息:

$ youtube-dl https://www.youtube.com/watch?v=eDSESarTQXk
zsh: no matches found: https://www.youtube.com/watch?v=eDSESarTQXk
Run Code Online (Sandbox Code Playgroud)

有没有办法zsh识别 URL,也许使用正则表达式,这样它就不会尝试将它们连接起来?

Ada*_*hon 6

您可以禁用zshNOMATCH" 选项:

setopt NO_NOMATCH
Run Code Online (Sandbox Code Playgroud)

NOMATCH启用该选项(这是默认设置)时,如果模式与文件名不匹配,则zsh 会打印错误消息。通过禁用NOMATCH,与文件名不匹配的模式在参数列表中保持不变。

请注意,该选项的名称是 real NOMATCH,因此您必须使用NO_NOMATCH禁用它,设置MATCH不起作用。

注意:这会影响所有通配符,而不仅仅是 URL。因此,如果您在模式不匹配时以任何方式依赖zsh返回错误,这不是可行的方法。(可悲的是,与NULL_GLOB没有允许启用/禁用NOMATCH每种情况的glob 限定符不同。)

  • +1 用于解释“NOMATCH”的后果,尽管我认为您的答案应该发布到重复的问题中。还有一句:你至少可以使用 `noglob` 命令暂时禁用 `NOMATCH` 行为,例如 `noglob youtube-dl url?foo=bar` (3认同)