执行Shell脚本中jq命令时遭遇「parse error: Invalid numeric literal」错误求助
错误原因排查及解决方法
错误原因
这个parse error: Invalid numeric literal错误是jq解析输入JSON时触发的,核心问题是输入的JSON数据格式无效:
- 变量
sGroupsMyIp的内容不是合法JSON,比如存在引号不闭合、语法错误,或者某个本该是数字类型的字段(对应错误提示的第1行第16列位置)出现了字符串、符号等非数字内容。 - 也有可能
sGroupsMyIp变量为空,或者因未加双引号被Shell拆分(比如空格分割内容),导致jq接收到的不是完整JSON。
解决步骤
验证输入JSON的有效性
执行以下命令检查sGroupsMyIp的内容是否为合法JSON:echo "$sGroupsMyIp" | jq .如果这里也报错,说明上游生成
sGroupsMyIp的命令输出有问题,需要先修复上游数据。修正Shell变量引用方式
原命令中echo $sGroupsMyIp未加双引号,当变量内容包含空格、换行或特殊字符时会被Shell拆分,导致jq无法解析完整JSON。修改为:sgRuleDetail=$(echo "$sGroupsMyIp" | jq --arg sGroupId "$sGroupId" 'select(.sgId | contains($sGroupId))')同时用
$()替代反引号,写法更清晰且避免嵌套问题。检查
sGroupId变量内容
确认sGroupId的值是否符合预期,比如是否包含特殊字符(如引号、反斜杠):echo "$sGroupId"若有特殊字符,
--arg会自动处理转义,无需额外操作,但要确保该值确实是你要匹配的sgId内容。直接测试jq逻辑
如果仍有问题,可以用已知合法的JSON数据代入测试,排除变量影响:echo '{"sgId": "sg-12345", "other": "data"}' | jq --arg sGroupId "sg-12345" 'select(.sgId | contains($sGroupId))'若该命令正常输出,说明问题出在你的变量数据上,而非jq命令逻辑。
内容的提问来源于stack exchange,提问作者sathavahana
相关产品推荐
相关产品推荐

