ZSH:
sudo apt-get remove --purge ubuntuone-*
ERROR: zsh: no matches found: ubuntuone-*
在 Bash 上有效。有什么问题?:-D
答案1
是的,zsh
并且bash
在这方面的行为有所不同。
在 中zsh
,当您说“ ubuntuone-*
”时,它会在当前工作目录中查找以 - 开头的文件ubuntuone-
,因为没有找到任何文件,所以它会说“ no matches
”并且不运行该命令。
bash
采取了不同的策略 - 它还会在当前工作目录中查找以 开头的文件ubuntuone-
,但如果没有找到,它会对自己说,“也许我正在调用的程序知道如何处理通配符”,因此将“ ubuntuone-*
”sudo apt-get
作为文字参数传递。
如果您当前工作目录中有一个名为的文件ubuntuone-ffdjhjer
,那么 bash 会尝试执行sudo apt-get remove --purge ubuntuone-ffdjhjer
,但这可能会失败。
在zsh
(和 在bash
)中,您可以使用单引号来告诉它不要扩展通配符而是将其传递下去,如下所示:
sudo apt-get remove --purge 'ubuntuone-*'
答案2
这个答案可能有点晚了,但有一种方法可以解决这个问题。从命令行执行:
unsetopt no_match
答案3
还有另一种方法可以防止 zsh 中的扩展,我更喜欢这种方法而不是引号:
sudo apt-get remove --purge ubuntuone-\*