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

为何mkdir dir0[3-9]无法按预期创建连续编号目录?

为什么mkdir dir0[3-9]没有创建预期的目录?

问题出在你搞混了Shell的两种完全不同的展开机制:

1. 方括号[3-9]是Glob通配匹配,不是生成工具

[3-9]属于Shell的glob语法,它的作用是匹配当前目录中已存在的文件名里的单个字符,而不是生成新的字符序列。

当你执行mkdir dir0[3-9]时,Shell会先检查当前目录有没有符合dir0后面跟3-9之间单个数字的文件/目录:

  • 如果有(比如已经存在dir03),Shell会把dir0[3-9]替换成匹配到的文件名(比如dir03);
  • 如果没有任何匹配项,Shell就不会展开这个glob,直接把dir0[3-9]作为字面量传递给mkdir,最终就创建了名为dir0[3-9]的目录。

2. 花括号{3..9}是大括号展开,专门用来生成序列

你用的dir0{3,4,5,6,7,8,9}其实可以简化成dir0{3..9},这属于Shell的大括号展开语法——它的核心作用就是主动生成指定范围的字符串序列,不管当前目录有没有对应的文件,Shell都会先把它展开成dir03 dir04 dir05 dir06 dir07 dir08 dir09,再把这些参数传给mkdir,自然就能创建出你要的目录。

根本原因总结

你错误地把「匹配现有文件的glob通配」当成了「生成新字符串的展开工具」。方括号语法从设计上就不是用来生成新文件名的,它只负责匹配已存在的文件;而大括号展开才是Shell提供的、用来批量生成字符串序列的功能。

内容的提问来源于stack exchange,提问作者yossi-matkal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:58:17