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

Shell脚本出现value too great for base错误(令牌168a)求解决方案

问题分析与解决方案

错误原因

你的循环逻辑存在核心错误:

  • for i in "${data[@]}" 会将数组data的每个元素值赋值给变量i,而非数组的索引(0、1、2这类整数)。
  • 执行echo "${data[i]}"时,bash会把i的当前值(比如f1bfab2e-168a-4da7-9677-5018e5f97g0f)当作数组索引解析,但bash数组索引必须是整数,因此它会尝试将这个字符串转为算术表达式求值:
    字符串中的-168a会被识别为负数,bash尝试解析168a为数字——但168里的8不符合八进制规则(八进制仅允许0-7),a也不是十进制合法字符,最终触发value too great for base错误。

你尝试的变量间接引用${data[${!i}]}逻辑也不对:${!i}是读取变量名为i当前值的变量内容,比如i是abc123,它会去读未定义的变量abc123,bash会把空值当作索引0,所以每次都输出数组第一个元素。

正确写法

根据你输出数组所有元素的需求,有两种简单的解决方式:

方式1:直接遍历元素输出

既然循环已经拿到每个元素,直接输出i即可,无需再从数组取值:

data=($( jq -r '.data' data.json  | tr -d '[]," ' ))

for i in "${data[@]}"; do
  echo "$i"
done

方式2:遍历数组索引

如果需要用到索引值,可以用整数循环的写法:

data=($( jq -r '.data' data.json  | tr -d '[]," ' ))

for ((i=0; i<${#data[@]}; i++)); do
  echo "${data[i]}"
done

补充说明

168a本身没有特殊意义,错误只是因为bash把它当作数字解析时,既不符合十进制(包含非法字符a)也不符合八进制(包含非法数字8),导致解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:15:55