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

Bash脚本for循环大括号范围传参输出{1..10}异常排查

异常原因

Bash解析脚本语句有固定的优先级顺序,大括号扩展{x..y}的执行时机早于变量扩展:

  1. 执行到for i in {1..$1}这行时,最先触发大括号扩展逻辑,但此时$1还没被替换成传入的参数10,Bash发现大括号里的范围边界存在未解析的变量,不满足生成序列要求的常量条件,就不会展开成1到10的数字列表,直接保留原字符串格式。
  2. 等大括号扩展步骤跑完,才轮到变量扩展把$1替换成10,这时候整个串变成了字面量{1..10},但大括号扩展的流程早就结束了,不会回头再做二次处理,最终for循环只会拿到这一个字符串,输出结果自然就是{1..10}。
修复方案
  • 优先用Bash原生C风格for循环,没有兼容性坑,逻辑最直观:
#!/bin/bash
for ((i=1; i<=$1; i++))
do
    echo $i
done
  • 也可以用seq命令生成数字序列,写法更简洁:
#!/bin/bash
for i in $(seq 1 "$1")
do
    echo $i
done
  • 不推荐新手使用的eval写法(存在命令注入风险,仅作原理参考),靠强制二次解析触发大括号扩展:
#!/bin/bash
for i in $(eval echo "{1..$1}")
do
    echo $i
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:36:18