问题描述
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
},"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 对象键(在本例中,用于file-encoding
)和 -
单引号用于 JSON 对象值(在本例中,用于
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
的条目。
如果您确实想要一个不会强迫您转义任何引号的解决方案,您可以使用:
- shell 脚本参数的简单引号
az keyvault secret list --vault-name 'lofa' --query '[]'
- 您的密钥的双引号,因为它包含一个破折号
az keyvault secret list --vault-name 'lofa' --query '[?tags."file-encoding"]'
-
backticks for your literal、
utf-8
az keyvault secret list --vault-name 'lofa' --query '[?tags."file-encoding"==`utf-8`]'