You need to enable JavaScript to run this app. Bash的glob模式中*通配符是否可以匹配连字符?
优惠活动
大模型
产品
解决方案
定价
更多

Bash的glob模式中*通配符是否可以匹配连字符?

问题原因解答

你遇到的现象和glob通配符本身的规则无关,核心原因是shell的通配符预展开机制,而非find的匹配逻辑有问题:

  • 当你没有给命令里的通配符加引号时,shell会先在当前工作目录下匹配符合通配符规则的文件,用匹配到的文件名替换掉通配符后,才会把最终参数传递给find命令执行。
  • 第一次执行find . -iname *.properties时,你的当前工作目录下刚好只有gradle.properties这一个符合*.properties规则的文件,shell会直接把命令替换为find . -iname gradle.properties传给find,自然只会搜索名字完全匹配gradle.properties的文件,找不到带连字符的cfg-local.properties。
  • 第二次执行find . -iname *-*.properties时,你的当前工作目录下不存在符合*-*.properties规则的文件,shell无法完成预展开,就会把*-*.properties原样作为参数传给find,此时find自身的glob匹配逻辑才会生效,递归在所有子目录下查找符合规则的文件,所以输出了你需要的cfg-local.properties结果。

正确写法

如果要让find来处理通配符的递归匹配,需要给带通配符的参数加上单引号或双引号,避免shell提前展开:

find . -iname '*.properties'

执行以上命令就能找到所有后缀为properties的文件,包含你要的cfg-local.properties。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 13:06:01