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
同样有效
如何才能完全按照 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
同样有效