微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当键包含连字符/破折号时,如何在 Bash 上使用 JMESPath 查询按值过滤 Azure CLI 输出?

如何解决当键包含连字符/破折号时,如何在 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
  },"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 literalutf-8
    az keyvault secret list --vault-name 'lofa' --query '[?tags."file-encoding"==`utf-8`]'
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。