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

Bash glob如何实现非单位长度字符串的OR匹配

匹配01A、01B、02A、02B四类文件的实现方法

方法1:使用Bash大括号扩展(默认支持,无需额外配置)

直接执行以下命令即可:

ls *{01,02}*[AB].txt
  • 原理:大括号{01,02}会被Bash自动展开为*01*[AB].txt和*02*[AB].txt两个匹配规则,等价于分别执行两次匹配后合并结果,完全符合需求。

方法2:使用扩展glob模式(适合更复杂的匹配场景)

如果后续有更复杂的匹配需求,可以开启extglob扩展功能实现:

  1. 先开启扩展glob:
shopt -s extglob
  1. 执行匹配命令:
ls *@(01|02)*[AB].txt
  • 原理:@(pattern1|pattern2)是扩展glob的专属语法,代表精确匹配括号内的任意一个完整模式,这里就是匹配01或者02两个连续字符串,不会被拆解为单个字符匹配。
  • 不需要扩展功能时可以执行shopt -u extglob关闭该选项。

之前尝试失败的原因

  • 直接用|符号:普通glob模式下|是管道符,会被Bash识别为命令分隔标识,因此直接报错。
  • 使用[01,02]或加引号的["01","02"]:方括号属于字符匹配类,仅支持匹配单个字符,你写的规则实际会被解析为匹配0、1、2、,四个单个字符,只要文件名包含其中任意一个字符就会命中,因此会匹配到带03的文件,加引号也不会改变字符类的匹配逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:48:00