Apt-get * 使用 ZSH 的通配符

Apt-get * 使用 ZSH 的通配符

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-\*

相关内容