JMESPath 从列表中提取原始值
JMESPath extract raw values from list
我正在尝试使用 Azure CLI 编写一些脚本。假设我的查询返回以下内容:
[
"a",
"b",
"c"
]
我想在 bash 循环中使用这些值。以下列形式获取它们会更好:
a
b
c
有没有一种方法可以理想地使用 JMESPath 查询原语来做到这一点?否则我将不得不使用 bash 命令,这对 JMESPath 有很多不足之处。
看来你可以使用 --out tsv
,
例如,az vm list --out tsv | grep RGD | cut -f8
KBDemo001VM
KBDemo020
的更多详细信息
我在使用 JMESPath 查询输出方面没有取得多大成功。但我发现使用 jq 更容易解析返回的 json。
例如,我需要将内部服务终结点添加到特定虚拟网络中的所有子网。我会将 json 输出传递给 bash 数组,并使用 for 循环,您可以使用 json 键值对执行命令。
update_subnet() {
subnet_service_endpoints="Microsoft.EventHub Microsoft.KeyVault Microsoft.ServiceBus Microsoft.Storage"
subnet_json=$(az network vnet subnet list --subscription ${subscription_name} --resource-group ${resource_group} --vnet-name ${virtual_network} --output json)
readarray -t SUBARR < <(echo ${subnet_json} | jq -c '.[]')
for SUBNET in "${SUBARR[@]}"
do
SUBNET_NAME=$(echo "${SUBNET}" | jq -r .name)
ADDRESS_PREFIX=$(echo "${SUBNET}" | jq -r .addressPrefix)
RESOURCE_GROUP=$(echo "${SUBNET}" | jq -r .resourceGroup)
RESULT=$(az network vnet subnet update --subscription ${subscription_name} --resource-group ${resource_group} --vnet-name ${virtual_network} --name ${SUBNET_NAME} --address-prefixes ${ADDRESS_PREFIX} --service-endpoints ${subnet_service_endpoints})
if [ "$RESULT" == "" ]
then
echo "Something happened and unable to parse command"
else
echo "${RESULT}"
fi
done
}
我正在尝试使用 Azure CLI 编写一些脚本。假设我的查询返回以下内容:
[
"a",
"b",
"c"
]
我想在 bash 循环中使用这些值。以下列形式获取它们会更好:
a
b
c
有没有一种方法可以理想地使用 JMESPath 查询原语来做到这一点?否则我将不得不使用 bash 命令,这对 JMESPath 有很多不足之处。
看来你可以使用 --out tsv
,
例如,az vm list --out tsv | grep RGD | cut -f8
KBDemo001VM
KBDemo020
的更多详细信息
我在使用 JMESPath 查询输出方面没有取得多大成功。但我发现使用 jq 更容易解析返回的 json。
例如,我需要将内部服务终结点添加到特定虚拟网络中的所有子网。我会将 json 输出传递给 bash 数组,并使用 for 循环,您可以使用 json 键值对执行命令。
update_subnet() {
subnet_service_endpoints="Microsoft.EventHub Microsoft.KeyVault Microsoft.ServiceBus Microsoft.Storage"
subnet_json=$(az network vnet subnet list --subscription ${subscription_name} --resource-group ${resource_group} --vnet-name ${virtual_network} --output json)
readarray -t SUBARR < <(echo ${subnet_json} | jq -c '.[]')
for SUBNET in "${SUBARR[@]}"
do
SUBNET_NAME=$(echo "${SUBNET}" | jq -r .name)
ADDRESS_PREFIX=$(echo "${SUBNET}" | jq -r .addressPrefix)
RESOURCE_GROUP=$(echo "${SUBNET}" | jq -r .resourceGroup)
RESULT=$(az network vnet subnet update --subscription ${subscription_name} --resource-group ${resource_group} --vnet-name ${virtual_network} --name ${SUBNET_NAME} --address-prefixes ${ADDRESS_PREFIX} --service-endpoints ${subnet_service_endpoints})
if [ "$RESULT" == "" ]
then
echo "Something happened and unable to parse command"
else
echo "${RESULT}"
fi
done
}