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

Bash中传递含大括号扩展的变量给mkdir命令的问题

问题原因与解决方法

核心原因

Bash的大括号扩展(比如{1..5})是在变量展开之前执行的。当你把带{1..5}的字符串赋值给变量subdir时,大括号不会被解析为扩展语法,而是被当作普通字符存储。执行mkdir -p $subdir时,bash只会把变量内容原样展开,最终创建的是包含{1..5}字符的目录,而非你想要的嵌套组合目录。

可行解决方案

方法1:用eval强制重新解析扩展

eval会让bash重新处理变量内容,触发大括号扩展:

subdir="subdir{1..5}/subdir{1..5}/subdir{1..5}/subdir{1..5}"
eval mkdir -p "$subdir"

注意:eval会执行变量里的所有命令,若变量内容来自不可信来源存在安全风险,但这里是自定义路径,可放心使用。

方法2:用数组存储预扩展的路径

提前让bash完成大括号扩展,把结果存入数组,再传递给mkdir:

# 直接赋值时完成大括号扩展,存入数组
subdir=(subdir{1..5}/subdir{1..5}/subdir{1..5}/subdir{1..5})
# 展开数组所有元素作为mkdir的参数
mkdir -p "${subdir[@]}"

这种方法更安全,避免了eval的潜在风险,是推荐做法。

方法3:用函数封装逻辑(适合复用场景)

如果需要多次创建类似结构的目录,可以写一个简单函数:

make_nested_dirs() {
  mkdir -p "$1"
}
# 调用时直接传入带大括号扩展的路径,此时会先完成扩展再传入函数
make_nested_dirs subdir{1..5}/subdir{1..5}/subdir{1..5}/subdir{1..5}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:45:02