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

Bash管道中转义字符丢失致jq解析失败,如何保留转义?

解决JSON流中转义符丢失导致jq解析失败的问题

你的问题根源出在read命令和echo的默认行为上:

  • read默认会将反斜杠视为转义符,自动剥离,导致JSON里的\"变成",破坏了格式。
  • echo $j会触发shell的分词、路径扩展等操作,进一步损坏JSON结构。

修复方案1:修正read和echo的用法

修改循环代码,给read加上-r选项保留原始转义,同时用printf代替echo输出:

while read -r j; do
  printf "%s\n" "$j" | jq 'select(.my_field | match("..."))' | ...
done
  • -r:让read不处理反斜杠转义,完整保留输入的所有字符
  • printf "%s\n" "$j":准确输出原始的JSON行,避免echo的潜在格式破坏问题

修复方案2:直接让jq处理整个流(更高效)

没必要用shell循环逐行处理,jq本身支持流式处理多个JSON文档,直接把整个管道输入传给jq即可,完全避开shell转义的问题:

program_a | jq 'select(.my_field | match("..."))' | ...

这种方式不仅更简洁,还能避免shell循环带来的性能损耗和转义问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:13:20