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

使用jq修改JSON时--arg定义的变量未解析为值仅输出变量名如何解决

问题原因
  • jq语法规则中,双引号包裹的字符串为静态字面量,不会自动解析内部的$开头的参数变量,所以你使用的"Addr $ad"会直接输出字面量内容,不会替换为传入的参数值。
  • 去掉双引号后的写法不符合jq表达式规范:未加引号的Addr不会被识别为字符串,同时字符串与变量也没有做拼接操作,直接触发语法报错。
  • 额外说明:你命令中添加的-r参数作用是输出原始无引号的字符串值,如果你需要输出完整JSON结构,不需要添加该参数,否则会破坏JSON格式。
修复方案

Debian 10默认源安装的jq版本完全兼容以下两种写法,无需额外升级软件包:

写法1:字符串拼接

jq --arg ad "192.168.5.5" '.name = "Addr " + $ad' address.tmpl

写法2:字符串插值

jq --arg ad "192.168.5.5" '.name = "Addr \($ad)"' address.tmpl

两种写法执行后都会输出预期的结果:

{
  "name": "Addr 192.168.5.5"
}

内容的提问来源于stack exchange,提问作者John Beavers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:36:00