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

如何修正Shell中jq语法,判断JSON数组是否包含字符串变量

问题原因与解决方法

你的问题出在Shell单引号的变量解析规则:当你用单引号包裹jq表达式时,Shell不会解析单引号内部的$favorite_food变量,而是把它当成一个字面字符串"$favorite_food"去匹配数组元素,自然找不到对应的值,所以返回false。

正确的写法有两种:

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

这是jq官方推荐的传递外部变量的方式,能避免Shell字符串转义的问题,兼容性更好:

in_stock=$(jq -n --argjson v '["orange","apple","pickle"]' '$v')
favorite_food="pickle"
echo $in_stock | jq --arg food "$favorite_food" 'contains([$food])'
# 输出:true

--arg food "$favorite_food"会把Shell变量的值传递给jq内部的$food变量,在jq表达式里直接用$food就能拿到正确的变量值。

方法2:用Shell双引号让变量展开

如果一定要用Shell变量展开,需要把jq表达式放在双引号里,同时转义jq里的双引号(避免和Shell的双引号冲突):

echo $in_stock | jq "contains([\"$favorite_food\"])"
# 输出:true

这种方式要注意,如果变量里包含特殊字符(比如引号、反斜杠),可能会导致jq解析出错,所以优先用方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:33:13