使用 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 数组。
$( … )
只是反引号之外的另一种命令替换形式。我更喜欢这个,因为它对我来说更易读。
我有以下脚本:
#!/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 数组。
$( … )
只是反引号之外的另一种命令替换形式。我更喜欢这个,因为它对我来说更易读。