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

如何在jq命令中传入变量动态获取JSON文件指定字段值

Shell中jq动态传参匹配JSON字段的正确写法

原有写法的错误点

  • 读取generic.category字段时未加-r参数,jq默认输出带JSON双引号(比如输出"two"而非two),作为路径参数时会匹配失败
  • 动态字段拼接语法错误:对象下标取值后连接下级字段缺少.分隔,多余的通配符*也会干扰路径解析
  • 传变量时未给shell变量加引号,若变量值含空格等特殊字符会触发解析错误
  • 冗余使用cat管道传文件内容,jq本身支持直接读取目标文件

可直接运行的修正代码

# 加-r参数输出原始无引号字符串
stack=$(jq -r '.generic.category' profiles.json)

# 通过--arg安全传入shell变量,按对象下标语法动态匹配路径
email=$(jq -r --arg target_stack "$stack" '.central[$target_stack].email' profiles.json)
echo "$email"

password=$(jq -r --arg target_stack "$stack" '.central[$target_stack].password' profiles.json)
echo "$password"

语法说明

  • jq -r:启用原始输出模式,字符串类结果直接输出纯文本,不包裹JSON格式要求的双引号
  • --arg <变量名> <值>:jq官方支持的外部变量传入方式,自动处理特殊字符转义,比手动字符串拼接更安全
  • .central[$target_stack].email:路径解析逻辑为取根节点下的central对象 → 以传入的变量值为key匹配对应的子对象 → 取子对象下的email字段值,完全匹配给定的profiles.json结构

当配置中category值为two时,运行代码会正确输出:

xyz@gmail.com
2222

内容的提问来源于stack exchange,提问作者RR HS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:57:16