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

使用jq工具提取带连字符的JSON键值时,Shell变量无法正常替换的问题咨询

使用jq工具提取带连字符的JSON键值时,Shell变量无法正常替换的问题咨询

嗨,我懂你遇到的这个头疼问题了——Shell里的单引号是「强引用」,里面的变量根本不会被解析展开,所以你用'."$var1"'的时候,jq收到的就是字面量."$var1",自然找不到对应的键,只能返回null啦。给你两个实用的解决办法:

方法一:用jq的--arg参数传递变量(最推荐)

这是最靠谱的方式,完全避开Shell引号转义的坑,不管键名里有啥特殊字符都能稳稳处理:

export var1=a-b-c
echo $test | jq --arg key "$var1" '.[$key]'

原理很直观:--arg key "$var1"会把Shell变量var1的值传递给jq内部的变量key,然后用.[$key]就能精准定位到对应的键值,执行后就能得到你想要的"x-y-z"。

方法二:Shell层面拼接表达式

要是你不想用jq的参数传递,也可以让Shell先把变量展开再传给jq,这时候需要灵活组合引号:
比如用转义双引号包裹整个jq表达式:

echo $test | jq ".[\"$var1\"]"

或者用单引号和双引号拼接:

echo $test | jq '.["'"$var1"'"]'

这里Shell会先把$var1展开成a-b-c,拼接成.["a-b-c"]再传给jq,也能正常工作。不过要是变量里包含引号这类特殊字符,这种方法可能会出问题,所以还是更推荐第一种方法哦。

备注:内容来源于stack exchange,提问作者alexus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:43:00