Bash脚本嵌套循环中mkdir命令出现语法错误求助
修复批量创建目录的Bash脚本语法错误
你的脚本存在三个核心语法问题,导致内层循环的mkdir调用报错:
- 内层
for循环缺少do关键字:Bash的for循环必须遵循for 变量 in 列表; do ... done的完整结构,原脚本中for week in {1..52}后直接执行mkdir,没有添加do,导致Shell无法正确解析循环结构。 - 错误使用HTML转义引号:脚本里的
"是HTML的双引号转义字符,Bash会将其当作目录名的一部分,而非引号符号,必须替换为普通双引号"。 - 多余的
\n转义符:Bash脚本中无需手动添加\n来换行,直接换行即可,\n会被当作命令参数的一部分,引发路径解析错误。
修正后的完整脚本
mkdir ./output for year in {1990..2025} do mkdir ./"$year" for week in {1..52} do mkdir ./"$year"/"$week" done done
额外说明
- 给变量
$year和$week包裹双引号是为了兼容变量值包含特殊字符的场景,即使当前变量是数字,这也是编写健壮Bash脚本的好习惯。 - 如果不需要
./output目录,可以删除第一行的mkdir ./output,原脚本后续创建的年份目录直接位于当前工作目录下,与该目录无关。
内容的提问来源于stack exchange,提问作者Jan Hackenberg
相关产品推荐
相关产品推荐

