AWS CLI多标识符过滤:表达式中的点是否可选?为何结果一致?
AWS CLI查询中JMESPath表达式的点是否可选?
在使用AWS CLI通过--query参数筛选多个实例属性时,发现两种写法返回结果完全一致:一种是在数组索引后加.再跟多选列表,另一种直接在数组索引后接多选列表,但官方文档里没说明这个点可以省略。想搞清楚这个点是不是可选,以及为什么两种写法效果相同。
示例命令及结果
带点的查询命令
aws ec2 describe-instances \ --query 'Reservations[].Instances[].[InstanceId,InstanceType]'
返回结果:
[ [ "i-0f74894a273e9a76f", "t2.micro" ], [ "i-007598b789e08ca19", "t2.micro" ], [ "i-0e2defdabf5771dfa", "t2.micro" ], [ "i-07db1ecca76653ae5", "t2.micro" ] ]
不带点的查询命令
aws ec2 describe-instances \ --query 'Reservations[].Instances[][InstanceId,InstanceType]'
返回结果:
[ [ "i-0f74894a273e9a76f", "t2.micro" ], [ "i-007598b789e08ca19", "t2.micro" ], [ "i-0e2defdabf5771dfa", "t2.micro" ], [ "i-07db1ecca76653ae5", "t2.micro" ] ]
原因说明
AWS CLI的--query参数基于JMESPath语法,而JMESPath规范允许这种省略.的写法,属于语法糖:
- 当数组展开表达式(如
Instances[])后直接跟另一个表达式(如多选列表[InstanceId,InstanceType])时,会自动隐式处理为子表达式,等价于显式添加.的写法。 - 两种写法都会对数组中的每个元素应用后续的属性选择逻辑,因此最终返回结果完全一致。
虽然AWS官方文档未特意提及这个细节,但这是JMESPath本身的语法特性,所以两种写法效果相同。
内容的提问来源于stack exchange,提问作者user19530641
相关产品推荐
相关产品推荐

