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

