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

执行Shell脚本中jq命令时遭遇「parse error: Invalid numeric literal」错误求助

错误原因排查及解决方法

错误原因

这个parse error: Invalid numeric literal错误是jq解析输入JSON时触发的,核心问题是输入的JSON数据格式无效:

  • 变量sGroupsMyIp的内容不是合法JSON,比如存在引号不闭合、语法错误,或者某个本该是数字类型的字段(对应错误提示的第1行第16列位置)出现了字符串、符号等非数字内容。
  • 也有可能sGroupsMyIp变量为空,或者因未加双引号被Shell拆分(比如空格分割内容),导致jq接收到的不是完整JSON。

解决步骤

  1. 验证输入JSON的有效性
    执行以下命令检查sGroupsMyIp的内容是否为合法JSON:

    echo "$sGroupsMyIp" | jq .
    

    如果这里也报错,说明上游生成sGroupsMyIp的命令输出有问题,需要先修复上游数据。

  2. 修正Shell变量引用方式
    原命令中echo $sGroupsMyIp未加双引号,当变量内容包含空格、换行或特殊字符时会被Shell拆分,导致jq无法解析完整JSON。修改为:

    sgRuleDetail=$(echo "$sGroupsMyIp" | jq --arg sGroupId "$sGroupId" 'select(.sgId | contains($sGroupId))')
    

    同时用$()替代反引号,写法更清晰且避免嵌套问题。

  3. 检查sGroupId变量内容
    确认sGroupId的值是否符合预期,比如是否包含特殊字符(如引号、反斜杠):

    echo "$sGroupId"
    

    若有特殊字符,--arg会自动处理转义,无需额外操作,但要确保该值确实是你要匹配的sgId内容。

  4. 直接测试jq逻辑
    如果仍有问题,可以用已知合法的JSON数据代入测试,排除变量影响:

    echo '{"sgId": "sg-12345", "other": "data"}' | jq --arg sGroupId "sg-12345" 'select(.sgId | contains($sGroupId))'
    

    若该命令正常输出,说明问题出在你的变量数据上,而非jq命令逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:15:41