【发布时间】:2021-02-03 15:41:28
【问题描述】:
我正在尝试使用 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
请注意,这一切都包含在一个循环中,以构建我感兴趣的策略版本数组。 "[]" 最初是在循环外的变量中定义的。
【问题讨论】:
-
你可能不需要
jq;aws支持 JMESPath 查询以在结果输出之前对其进行操作。 -
@chepner,谢谢。我会调查的。
-
.[.| length] |= . + {"type": "name"}可以缩短为.[length] = {"type": "name"}甚至更好:. + [{type: "name"}] -
内部 jq 看起来不错,但是外部 jq 的 STDIN 输入是什么?
-
嗨@peak,内部jq的输出是
{ "PolicyVersion": { "CreateDate": "2015-06-17T19:23;32Z", "VersionId": "v2", "Document": { "Version": "2012-10-17", "Statement": [ { "Action": "iam:*", "Resource": "*", "Effect": "Allow" } ] } "IsDefaultVersion": "false", "PolicyName": "MyPolicy"}}