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

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

我只是想使用 下载 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

有没有办法zsh识别 URL,比如使用正则表达式,这样它就不会尝试将它们全部匹配?

答案1

您可以禁用NOMATCH“选项

setopt NO_NOMATCH

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

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

注意力:这会影响所有通配符,而不仅仅是 URL。因此,如果你以任何方式依赖当模式不匹配时返回错误,这不是解决办法。(遗憾的是,与NULL_GLOB没有 glob 限定符允许NOMATCH根据情况启用/禁用不同。)

答案2

您可以将 URL 放在引号中,这样它就可以起作用。

$ youtube-dl 'https://www.youtube.com/watch?v=eDSESarTQXk'
[youtube] eDSESarTQXk: Downloading webpage
[youtube] eDSESarTQXk: Downloading video info webpage
[youtube] eDSESarTQXk: Extracting video information
...

相关内容