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

