2016-02-24 29 views
0

我在ZSH中设置简单函数时遇到问题。处理“?”传递给ZSH函数的字符

我想制作只从youtube下载mp3文件的功能。

我用的YouTube-DL,我想进行简单的功能,使这容易,我

ytmp3(){ 
    youtube-dl -x --audio-format mp3 "[email protected]"} 

所以,当我尝试

ytmp3 https://www.youtube.com/watch?v=_DiEbmg3lU8 

我得到

zsh: no matches found: https://www.youtube.com/watch?v=_DiEbmg3lU8 

但如果我试试

ytmp3 "https://www.youtube.com/watch?v=_DiEbmg3lU8" 

它的工作原理。 我想出了程序运行(但不会下载任何东西),如果我删除所有charachers后?包括它。所以我想这是zsh的某种特殊性质。

回答

0

问号是ZSH模式匹配的一部分,类似于*。它的意思是“任何角色”。

例如,ls c?nfig会列出“配置”和“cinfig”,只要它们的存在。

所以,是的,你的问题只是zsh试图解释?在网址中作为与文件相匹配的模式,无法找到任何文件,并且无法播放。逃离?用一个\或者像你那样引用它来解决它。

+0

我找到了一种方式围绕 我做了一个脚本,开放的bash shell的解释,我只是解析整个链路成。这是一种链接bash函数。 感谢您的回答! (我不能upvote我的代表是低) – penumbra

0

默认情况下,ZSH将尝试您在命令行用“水珠”模式(它会尝试匹配文件名的模式)。如果无法匹配,则会收到错误消息(“找不到匹配项”)。

您可以通过禁用nomatch选项禁用此行为:

unsetopt nomatch 

手册页介绍了此选项,如下所示(它描述了当选项启用会发生什么):

如果文件名生成模式没有匹配,则打印一个错误,而不是在参数列表中保持不变。

禁用选项再试一次:

$ unsetopt nomatch 
$ ytmp3 https://www.youtube.com/watch?v=_DiEbmg3lU8 

如果要永久禁用选项,您可以添加禁用命令你~/.zshrc文件。

相关问题