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

bash环境下jq使用CONTAINS过滤时带空格变量不生效问题求助

问题根因

你遇到的问题本质是对jq的contains函数传参逻辑理解有误:

  1. 直接写contains("10.32.0.4:8055", "10.32.0.7:8055")时,是给contains传入了两个独立的字符串参数,contains会判断输入字符串是否包含任意一个参数,所以能匹配到两条结果。
  2. 把两个搜索词用空格拼接成一个变量传入时,contains($EXPRSTRSEARCH)是把整个带空格的字符串当成单个匹配条件,要找的是expr字段里同时存在10.32.0.4:8055 10.32.0.7:8055这一整串内容的记录,自然没有匹配结果。

解决方案

你只需要在jq内部先把传入的空格分隔的搜索词拆成数组,再判断expr是否匹配数组内任意一个元素即可,命令如下:

exprStrSearch="10.32.0.4:8055 10.32.0.7:8055"
echo "${_metadatadashjson}" | jq -r --arg EXPRSTRSEARCH "$exprStrSearch" '
# 将空格分隔的搜索词拆分为数组
($EXPRSTRSEARCH | split(" ")) as $search_list
| .dashboard.panels[]
| select(any(.targets[].expr; contains($search_list[])))
| .targets[].expr
'

执行后会输出两条匹配的expr记录,和你硬编码参数的执行结果一致。

如果后续你的搜索关键词本身包含空格,可以自定义分隔符(比如用英文逗号拼接搜索词exprStrSearch="关键词1,关键词 2"),把代码里的split(" ")改成split(",")即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:54:04