2016-02-24 31 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文件。

相關問題