bash - 当键包含连字符/破折号时,如何使用 Bash 上的 JMESPath 查询按值过滤 Azure CLI 输出?
问题描述
结果az keyvault secret list --vault-name "lofa"
类似于下面的列表(但每种类型的元素更多):
[
{
"attributes": { ... },
"id": "https://lofa.vault.azure.net/secrets/conn-string",
"tags": {
"file-encoding": "utf-8"
}
},
{
"attributes": { ... },
"id": "https://lofa.vault.azure.net/secrets/a-password",
"tags": null
},
{
"attributes": { ... },
"id": "https://lofa.vault.azure.net/secrets/another-password",
"tags": {
"testThis": "miez",
"what": "else"
}
}
]
尝试首先过滤“简单”目标(即键不包含连字符的 JSON 对象),它按预期工作:
$ az keyvault secret list --vault-name "lofa" --query "[? tags.testThis=='vmi']"
这对键不起作用file-encoding
(导致invalid jmespath_type value
):
$ az keyvault secret list --vault-name "lofa" --query "[?tags.file-encoding=='utf-8']"
所以接下来尝试了单引号,但没有喜悦:
$ az keyvault secret list --vault-name "lofa" --query "[?tags.'file-encoding'=='utf-8']"
解决方案
解决方案是使用
\"
JSON 对象键(在本例中为 for )的转义双引号( )file-encoding
和- JSON 对象值的单引号(在本例中为 for
utf-8
)
az keyvault secret list --vault-name "lofa" --query "[?tags.\"file-encoding\"=='utf-8']"
注意:不知道为什么会这样,或者到底发生了什么,但是当尝试用转义的双引号替换单引号以及值部分时,
az keyvault secret list --vault-name "lofa" --query "[?tags.\"file-encoding\"==\"utf-8\"]"
它产生了一个列表,其中包含所有条目,但具有tags.file-encoding
.
推荐阅读
- php - Laravel Auth 注册路径或登录路径未找到
- bash - How do I compare time in bash?
- dictionary - 使用范围时,GO 是否总是以相同的顺序迭代映射条目?
- c - 如何将非 ascii 从标准输入正确写入文件
- xamarin - ItemsSource 绑定到视图模型中的 ObservableCollection 的自定义控件在删除/添加时不更新
- c++ - 为什么我不能将绑定的成员函数作为可调用对象传递?
- android - react-native-fbsdk 0.8.0 包 com.facebook.reactnative.androidsdk 不存在
- c# - c# 仅基于一个 Filed 获取结构列表的所有元素
- java - 不同长度数组中的公共子序列
- xcode - ios模拟器的应用屏幕尺寸太小