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

如何在Bash中使用数组配合mkdir命令创建子目录?

解决方法

要让mkdir像解析{1..5}一样解析数组,核心是让bash生成父目录和子目录的笛卡尔积路径。以下是两种无需for循环的实现方式:

方法1:使用eval结合逗号分隔的数组元素

bash的大括号扩展{a,b,c}要求元素用逗号分隔,因此先将数组转为逗号连接的字符串,再通过eval重新解析扩展逻辑:

# 定义子目录数组
tru=(1 2 3 4 5)
# 将数组元素转为逗号分隔的字符串
sub_dirs=$(IFS=,; echo "${tru[*]}")
# 通过eval让bash解析完整的大括号扩展
eval "mkdir -p {20..30}/{$sub_dirs}"

eval会把{20..30}/{$sub_dirs}解析为{20..30}/{1,2,3,4,5},进而展开成所有父目录+子目录的组合路径,和直接用{1..5}的效果完全一致。

方法2:用printf生成所有路径(无eval)

如果不想用eval(避免数组包含特殊字符时的潜在风险),可以用printf结合bash扩展生成所有路径后传递给mkdir:

tru=(1 2 3 4 5)
mkdir -p $(printf "%s/%s " $(printf "%s " {20..30} | sed "s/ / ${tru[*]} /g"))

原理是先给每个父目录拼接所有子目录,再展开成完整路径列表。不过这种方式在数组包含空格等特殊字符时可能失效,通用性不如第一种方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:37:46