You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何执行rm *$*命令未仅删除含$符号文件,反而误删全部文件?

为什么rm *$*会删除所有文件而非仅含$的文件?

核心原因:Shell对$的特殊解析

在Shell(比如Bash)中,$是变量引用的特殊符号,而非普通字符。当你执行rm *$*时,Shell会先对命令行做预解析:

  • 中间的$*会被Shell识别为“引用名为*的变量”,但这个变量几乎不存在,因此会被替换为空字符串。
  • 原本的*$*就变成了**,在默认开启globstar选项的Bash中,**会匹配当前目录下所有文件、子目录及子目录内的内容;就算没开启globstar,*本身也会匹配当前目录下所有非隐藏的文件和子目录。
  • 最终rm接收到的参数是所有匹配项,因此会执行删除所有文件、尝试删除子目录的操作。

正确的写法

要让Shell把$当作普通字符处理,有两种常用方式:

  • 用反斜杠转义$:
    rm *\$*
    
  • 把整个匹配模式用单引号括起来(单引号会阻止Shell解析特殊字符):
    rm '*$*'
    

内容的提问来源于stack exchange,提问作者Messiah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 08:09:24