Shell脚本通过参数批量创建目录失败,求修改方案
问题解决:Shell脚本中大括号扩展无法用变量生成目录的问题
问题原因
Shell的大括号扩展会在变量替换之前执行,所以脚本里的$1{$2..$3}会被先解析成week{1..5}这个字面字符串,而不是展开成week1、week2...week5,最终只会创建一个名为week{1..5}的目录,达不到预期效果。
修改方案
方案1:使用eval重新解析命令
eval会让Shell重新解析已经完成变量替换的命令,这样大括号扩展就能正常工作:
#!/bin/bash echo "$1" echo "$2" echo "$3" eval mkdir "$1{$2..$3}"
注意:如果参数包含特殊字符,
eval可能会有安全风险,适合可控的场景使用。
方案2:使用循环逐个创建目录(更安全)
用seq生成数字序列,通过循环遍历创建每个目录,避免eval的潜在风险:
#!/bin/bash echo "$1" echo "$2" echo "$3" for num in $(seq "$2" "$3"); do mkdir "$1$num" done
内容的提问来源于stack exchange,提问作者vishal saxena
相关产品推荐
相关产品推荐

