在 fish 中使用 apt-get 的通配符

在 fish 中使用 apt-get 的通配符

当我尝试删除系统上的所有 Ubuntu MATE 内容时,fish 似乎拒绝使用 apt-get 的通配符。

sudo apt-get remove mate-*
fish: No matches for wildcard “mate-*”. See `help expand`.

每次我想批量删除/安装软件包时,我都必须切换到 bash。有没有办法在 fish 中使用通配符来进行 apt-get?

答案1

即使在 bash 中,你在这里所做的事情也是模棱两可的。

在 bash 中,如果noglob未设置选项且mate-*与当前目录中的一个或多个文件匹配,它将扩展为将作为参数传递给的文件列表apt-get remove。否则,它将按字面意思传递给apt-get命令,除非:

  • 设置了该failglob选项,在这种情况下,行为将与fish
  • 选项nullglob已设置,在这种情况下mate-*将被完全删除

在 fish 中,该行为似乎等同于 bash 的failglob,而似乎没有等同于 bash 的set -o noglobset -f。因此,您需要通过引用明确防止通配符,例如

sudo apt-get remove "mate-*"

或者

sudo apt-get remove mate-"*"

(出于上述原因,您确实应该在 bash 中执行此操作)。

也可以看看:

还要注意的是,apt已经完全放弃了简单的通配符,转而采用aptitude-style 模式 - 请参阅使用 apt 通配符时出现问题

相关内容