我正在尝试使用jq: https://jqplay.org/s/MSk-uUDrRU建立一个数组
当我在野外尝试这样做时,使用jq命令,如:
echo "[]" | jq -r --arg arg1 $(aws iam get-policy-version --policy-arn arn:aws:iam::123456789012:policy/MyPolicy --version-id v2 | jq -r --arg arg2 "MyPolicy" '.entity + {"PolicyName": $arg2}') '.[.|length] |= . + $arg1'
得到如下错误信息:
jq: error: syntax error, unexpected ':', expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
"CreateDate":
jq: 1 compile error
$arg1中的这段代码输出到一个文件中
aws <long calling argument> | jq -r --arg arg2 "MyPolicy" '.entity + {"PolicyName": $arg2}'
AWS命令为https://docs.aws.amazon.com/cli/latest/reference/iam/get-policy-version.html
请注意,这些都被包装在一个循环中,以构建我感兴趣的策略版本数组。"[]"
最初是在循环外的变量中定义的。
在外部调用中使用——argjson而不是——arg。所以,为了清晰起见,你可以这样写:
output=$(aws iam get-policy-version --policy-arn arn:aws:iam::123456789012:policy/MyPolicy --version-id v2 | jq -r --arg arg2 "MyPolicy" '.entity + {"PolicyName": $arg2}' )
jq -rn --argjson arg1 "$output" '. + [$arg1]'
使用注释中显示的JSON,这将产生:
[
{
"PolicyName": "MyPolicy"
}
]
我还建议你尽量避免两次调用jq,例如:
aws ... |
jq --arg arg2 MyPolicy '[.entity + {"PolicyName": $arg2}]'