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

如何在jq字符串插值中拆分过滤器为多行且保持输出不变?

解决jq过滤器多行拆分的问题

当需要把较长的jq过滤器拆分成多行提升可读性时,以下几种方法可以实现需求,同时保证输出符合预期:

方法1:用字符串拼接符+拆分

将字符串模板拆分成多行,通过+连接各部分,既保持过滤器的可读性,又不会引入多余换行:

echo '{"foo":"bar","boo":"moo"}' | jq -r '
  "\(.foo)" + "|" +
  "\(.boo)"
'

输出:

bar|moo

方法2:借助Shell续行符\

利用Shell的续行符\将单引号包裹的过滤器拆成多行,Shell会自动把这些行拼接成完整的单行过滤器传给jq:

echo '{"foo":"bar","boo":"moo"}' | jq -r '\
"\(.foo)|\
\(.boo)"\
'

输出同样是bar|moo。

方法3:数组+join()(推荐)

如果要拼接的字段较多,把字段放入数组后用join("|")生成结果,这种写法最清晰:

echo '{"foo":"bar","boo":"moo"}' | jq -r '
  [.foo, .boo]
  | join("|")
'

输出结果一致。

原写法无效的原因

你之前尝试的写法会把过滤器里的换行符保留在输出字符串中,导致输出包含多余换行:

echo '{"foo":"bar","boo":"moo"}' | jq -r '
"
\(.foo)|
\(.boo)
"
'

实际输出是:

bar|
moo

这不符合预期,所以这种写法无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:50:37