You need to enable JavaScript to run this app. 相同jq命令部分MacOS执行报解析错误其余设备正常是什么原因?
优惠活动
大模型
产品
解决方案
定价
更多

相同jq命令部分MacOS执行报解析错误其余设备正常是什么原因?

问题根因
  • 概率最高:AWS CLI默认输出格式配置错误
    出问题的Mac设备上AWS CLI的默认输出格式被修改为了text或table,非JSON格式的输出传入jq后无法解析,刚好匹配报错提示的「第一行第18列存在非法数值字面量」。另外两台设备的AWS CLI默认输出格式为json,因此可以正常运行。
  • 次大概率:jq版本过低存在语法兼容问题
    你写的jq筛选表达式中(.ZoneName)的括号写法,在1.5版本以下的jq中存在兼容缺陷。部分老旧Mac软件源安装的jq仍停留在1.4及更低版本,会触发该解析错误。
  • 其他可能原因1:AWS CLI开启了默认分页器
    出问题的Mac上AWS CLI配置了默认分页工具(如less),输出内容会额外携带分页控制字符,导致传入jq的内容不是合法JSON结构。
  • 其他可能原因2:shell引号解析异常
    如果命令是复制粘贴输入,出问题的Mac的shell(如自定义配置后的zsh)可能错误解析了表达式外层的单引号,导致jq实际收到的筛选规则和预期不一致。
解决方案
  1. 优先排查AWS CLI输出格式
    执行以下命令查看当前默认输出格式:
aws configure get output

如果返回结果不是json,执行命令修改全局默认输出格式:

aws configure set output json

也可以直接在单次执行时指定输出格式,不需要修改全局配置:

aws ec2 describe-availability-zones --region ca-central-1 --output json | jq '.AvailabilityZones[]|.ZoneName'
  1. 检查并升级jq版本
    执行命令查看当前jq版本:
jq --version

如果版本低于1.5,通过Homebrew升级到最新版本:

brew upgrade jq

同时可以简化jq表达式去掉不必要的括号,兼容旧版本:将原表达式.AvailabilityZones[]|(.ZoneName)改为.AvailabilityZones[].ZoneName即可。
3. 关闭AWS CLI分页器验证
临时关闭分页器测试命令是否正常:

aws ec2 describe-availability-zones --region ca-central-1 --no-cli-pager | jq '.AvailabilityZones[].ZoneName'

如果测试正常,可以全局关闭分页器避免后续出现同类问题:

aws configure set cli_pager ''
  1. 手动输入整条命令
    不要复制粘贴,手动逐字输入命令,避免隐形字符或引号格式错误导致的解析问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:09:03