【发布时间】:2020-05-17 05:59:32
【问题描述】:
我有以下 json:
{
"kind": "ClusterConfig",
"managedNodeGroups": [
{
"name": "default-nodegroup",
"instanceType": "t3.medium"
},
{
"name": "elk-master-nodegroup",
"instanceType": "t3.medium"
},
{
"name": "elk-data-nodegroup",
"instanceType": "t3.medium"
}
]
}
上面的 json 是一个大 json 文件的一个有效子集,还有一些其他细节,为了简洁起见,这些细节被隐藏了。现在我想在managedNodeGroups 的每个数组元素中添加一个项目availabiltyZone: $PREFERRED_ZONE。例如,我希望输出为:
{
"kind": "ClusterConfig",
"managedNodeGroups": [
{
"name": "default-nodegroup",
"instanceType": "t3.medium",
"availabilityZone": "us-east-1a"
},
{
"name": "elk-master-nodegroup",
"instanceType": "t3.medium",
"availabilityZone": "us-east-1a"
},
{
"name": "elk-data-nodegroup",
"instanceType": "t3.medium",
"availabilityZone": "us-east-1a"
}
]
}
我正在尝试的 jq 命令和错误是:
$ jq --arg CONTR_CLUSTER_NAME "My-${StackName}" --arg CONTR_CLUSTER_REGION "${Region}" --arg ZONES ${Zones} --arg PREFERRED_ZONE "${Region}-a" '.metadata.name = $CONTR_CLUSTER_NAME | .metadata.region = $CONTR_CLUSTER_REGION | .availabilityZones = ($ZONES|split(","))' | (.managedNodeGroups[] | .preferredZone ) = $PREFERRED_ZONE tmp.json
bash: syntax error near unexpected token `='
Region 环境变量设置为us-east-1,Zones 设置为"\"us-east-1a\",\"us-east-1c\"",StackName 设置为example。
如果我只删除命令的最后一部分并执行它,则该命令可以正常执行。因此,将PREFERRED_ZONE 附加到managedNodeGroups 数组的每个元素会导致问题。例如,以下命令可以正常工作:
jq --arg CONTR_CLUSTER_NAME "My-${StackName}" --arg CONTR_CLUSTER_REGION "${Region}" --arg ZONES ${Zones} --arg PREFERRED_ZONE "${Region}-a" '.metadata.name = $CONTR_CLUSTER_NAME | .metadata.region = $CONTR_CLUSTER_REGION | .availabilityZones = ($ZONES|split(","))' tmp.json
{
"kind": "ClusterConfig",
"managedNodeGroups": [
{
"name": "default-nodegroup",
"instanceType": "t3.medium"
},
{
"name": "elk-master-nodegroup",
"instanceType": "t3.medium"
},
{
"name": "elk-data-nodegroup",
"instanceType": "t3.medium"
}
]
}
我在这里做错了什么?我缺少某种 foreach 来遍历数组元素,但无法从文档中弄清楚。我什至尝试了map, select 选项,但找不到解决方案。
【问题讨论】: