在鱼中使用通配符和 apt-get

The*_*002 2 command-line apt fish

在尝试删除进入我系统的所有 Ubuntu MATE 内容时,fish 似乎拒绝了 apt-get 的通配符。

sudo apt-get remove mate-*
fish: No matches for wildcard “mate-*”. See `help expand`.
Run Code Online (Sandbox Code Playgroud)

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

ste*_*ver 5

即使在 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-*"
Run Code Online (Sandbox Code Playgroud)

或者

sudo apt-get remove mate-"*"
Run Code Online (Sandbox Code Playgroud)

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

也可以看看:

还请注意,apt已经完全摆脱了简单的通配符,转而支持aptitude样式模式 - 请参阅使用通配符与 apt 的问题