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?
即使在 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-*"
Run Code Online (Sandbox Code Playgroud)
或者
sudo apt-get remove mate-"*"
Run Code Online (Sandbox Code Playgroud)
(出于上述原因,您确实应该在 bash 中执行此操作)。
也可以看看:
还请注意,apt
已经完全摆脱了简单的通配符,转而支持aptitude
样式模式 - 请参阅使用通配符与 apt 的问题。