当我尝试删除系统上的所有 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 noglob
或set -f
。因此,您需要通过引用明确防止通配符,例如
sudo apt-get remove "mate-*"
或者
sudo apt-get remove mate-"*"
(出于上述原因,您确实应该在 bash 中执行此操作)。
也可以看看:
还要注意的是,apt
已经完全放弃了简单的通配符,转而采用aptitude
-style 模式 - 请参阅使用 apt 通配符时出现问题。