如何在 while-read 循环中完全复制字符串?
这里有一个具体的例子。
我正在读取一个 JSON 文件:{"key":"值中包含\"引号\""}
,并将其传送到 while-read 循环中:
echo "{\"key\":\"value with a \\\"quote\\\" inside\"}" | jq -rc '.' | while read line; do echo "$line"; done
这是我看到的输出:
{"key":"value with a "quote" inside"}
在使用echo输出后,字段内的引号会消失。我希望保留这些转义字符,因此我查看了可能的解决方案,并怀疑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"}
read -r
来避免解释反斜杠。 - jandob