bash:JSON 文件中转义引号的精确再现

bash: exact reproduction of escaped quotes in a JSON file

如何才能完全按照 while-read 循环中的原样重现字符串?

下面是具体的例子。

我正在读取 JSON 文件: {"key":"value with a \"quote\" inside"} 并将其通过管道传输到 while-read 循环中:

echo "{\"key\":\"value with a \\"quote\\" inside\"}" | jq -rc '.' | while read line; do echo "$line"; done

这是我看到的输出:

{"key":"value with a "quote" inside"}

字段中的引号在回显后消失。我想保留那些转义字符,所以我查看了可能的解决方案,我怀疑 printf 可以提供帮助(Escape FileNames Using The Same Way Bash Do It)。通过将 echo 更改为 printf '%q':

echo "{\"key\":\"value with a \\"quote\\" inside\"}" | jq -rc '.' | while read line; do printf '%q' "$line"; done

我得到以下信息:

\{\"key\":\"value\ with\ a\ \"quote\"\ inside\"\}

不幸的是,现在之前未转义的引号也被转义了(除了所有其他转义)。你能告诉我如何在 while read 循环中实现以下输出吗?

{"key":"value with a \"quote\" inside"}
echo "{\"key\":\"value with a \\"quote\\" inside\"}" | while read -r line
do 
    echo "$line"
done

适合我。使用 -r 开关读取不解释反斜杠。但是

echo '{"key":"value with a \"quote\" inside"}' | while read -r line
do 
    echo "$line"
done

同样有效