bash:在JSON文件中精确复制转义引号

3

如何在 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"}

2
使用read -r来避免解释反斜杠。 - jandob
@jandob:谢谢!你能把这个作为答案发出来吗?我会接受的。它有效! :) - econ
1个回答

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

对我来说可行。使用-r开关,read不会解释反斜杠。但是

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

同样有效


是的,你说得对,我只是想要消除一些反斜杠。已经在上面进行了更正... - jandob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接