You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JMESPath contains函数查询Azure存储Blob时出现语法错误

Azure存储Blob筛选:JMESPath查询语法错误修复

我在检索Azure存储容器中的Blob时,想筛选出名称包含R00005006的Blob,但使用带JMESPath contains函数的--query参数时触发了语法错误。

正常运行的命令

以下命令可以正常列出所有Blob名称:

az storage blob list \
    --account-name $account_name \
    --account-key $key \
    --num-results $numResults \
    --show-next-marker \
    --container-name $container_name \
    --query [].name

错误写法及报错

修改--query参数为以下两种写法时,都会触发报错:
写法1:

--query [].name[?contains(@,'R00005006')=='true']

写法2:

--query [].name[?contains(@,'R00005006')]

报错信息:

syntax error near unexpected token `('

解决办法

问题根源是Shell解析冲突:Bash会把JMESPath表达式里的括号、单引号当成特殊命令字符解析,导致语法错误。只需把整个--query的JMESPath表达式用双引号包裹,就能避免Shell干扰。

推荐两种正确写法:

写法1:先筛选再提取名称(更高效)

在API返回阶段就完成筛选,减少本地处理的数据量:

az storage blob list \
    --account-name $account_name \
    --account-key $key \
    --num-results $numResults \
    --show-next-marker \
    --container-name $container_name \
    --query "[?contains(name,'R00005006')].name"

写法2:先提取名称再过滤(匹配原思路)

先获取所有Blob名称,再对名称列表做过滤:

az storage blob list \
    --account-name $account_name \
    --account-key $key \
    --num-results $numResults \
    --show-next-marker \
    --container-name $container_name \
    --query "[].name|[?contains(@,'R00005006')]"

补充说明:

  • JMESPath的contains函数直接返回布尔值,不需要额外和'true'做比较,用[?contains(...)]就能完成过滤。
  • 必须用双引号包裹整个表达式,确保Shell把它作为单一参数传递给az命令。

内容的提问来源于stack exchange,提问作者Priyank Shukla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:05:14