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

Bash中*通配符的匹配规则及扩展问题咨询

Bash 中 * 通配符的扩展规则

Bash 的 * 通配符是路径名扩展(globbing)的核心工具,以下是它的核心扩展规则及针对你问题的具体分析:

基础规则

  • * 匹配任意长度的任意字符序列(包括0个字符),默认情况下不会匹配以 . 开头的隐藏文件(若需匹配隐藏文件,可开启 dotglob shell 选项)。
  • 通配符的匹配是对整个文件名/路径段的完全匹配,模式中的每一部分都要对应文件名的对应位置:
    • 模式开头的固定字符必须匹配文件名的开头;
    • 模式结尾的固定字符必须匹配文件名的结尾;
    • 中间的 * 可填充任意字符(包括空),用来连接前后的固定字符。

针对你示例的分析

1. 模式 m*i*n*

这个模式要求文件名满足:

  • 以 m 开头;
  • 中间包含 i;
  • i 之后存在 n;
  • n 之后可以有任意字符(包括空)。

所以像 min、main、mixin、min_test、m1i2n3 这类文件名都会被匹配。

2. 模式 m*i*n

这个模式的核心限制是文件名必须以 n 结尾,完整要求:

  • 以 m 开头;
  • 中间包含 i;
  • 最后必须以 n 收尾。

因此只有 min、main、mixin 这类以 n 结尾的文件名会被匹配,而像 min_test、m1i2n3 这类结尾不是 n 的文件则无法匹配——这就是你执行该命令时未得到匹配结果的原因。

额外注意事项

  • 如果模式未匹配到任何文件,Bash 默认会保留原模式不展开,比如执行 echo non_exist* 时,若没有对应文件,会直接输出 non_exist*。
  • 通配符扩展是在 Bash 执行命令前完成的,echo 等命令接收的是已经展开后的文件名列表,而非原始模式。
  • 若要将 * 作为普通字符输出,需用引号包裹(单引号或双引号),比如 echo "m*i*n" 会直接输出字符串 m*i*n,不会触发通配符扩展。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:01:27