JQ:语法错误,使用 JQ 进行输入时意外':'?



我正在尝试使用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}]'

相关内容

  • 没有找到相关文章

最新更新