使用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
相关产品推荐
相关产品推荐

