使用 JQ 从 bash 中的 JSON 对象检索值

Retrieving value from JSON object in bash using JQ

我有以下脚本:

#!/bin/bash

CONFIG_RECORDER=`aws configservice describe-configuration-recorders`
NAME=$(jq -r ‘.ConfigurationRecorders[].name’ <<<“$CONFIG_RECORDER”)
echo $NAME

我正在尝试从以下 JSON 对象中检索名称的值:

{
"ConfigurationRecorders": [{
    "name": "default",
    "roleARN": "arn:aws:iam::xxxxxxxxxxxx:role/Config-Recorder",
    "recordingGroup": {
        "allSupported": true,
        "includeGlobalResourceTypes": true,
        "resourceTypes": []
    }
}]
}

当 运行 脚本时,我收到一条错误消息,指出 jq 无法打开文件。那是因为我试图传递存储在变量中的结果。我怎样才能超越这个?以下是错误:

jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end 
(Unix shell quoting issues?) at <top-level>, line 1:
‘.ConfigurationRecorders[].name’
jq: 1 compile error
NAME=$(jq -r '.ConfigurationRecorders[].name' <<<"$CONFIG_RECORDER")

<<< 被称为 here-string

-r 删除结果中的引号。

[] 在 jq 查询中是必需的,因为 ConfigurationRecorders 是一个 JSON 数组。

$( … ) 只是反引号之外的另一种命令替换形式。我更喜欢这个,因为它对我来说更易读。