我的反斜杠哪里去了?

Where did my backslashes go?

我有一个 JSON 结构,在另一个 JSON 结构中转义,在另一个 JSON 结构中转义。

cat 显示文件内容就好了:

 cat test.json 
{
  "payload": "{\"data\":\"{\\"nested\\":1}\"}"
}

我想将其分配给 zsh 中的一个变量。

但我发现我每次尝试 return 子 shell 的 cat 输出时,都会给我错误数量的反斜杠。

 X="$(cat test.json)"
 echo "$X"
{
  "payload": "{\"data\":\"{\"nested\":1}\"}"
}

 echo $(cat test.json)
{ "payload": "{\"data\":\"{\"nested\":1}\"}" }

 echo $(<test.json)
{ "payload": "{\"data\":\"{\"nested\":1}\"}" }

我的反斜杠哪里去了?我可以取回它们吗?

我正在使用 zsh 5.2 (x86_64-apple-darwin16.0)

正在将变量设置为正确的值。 您使用的是 dash,而不是 bash,或者您的 bash shell 设置了 xpg_echo 选项。但是,zsh 内置 echo 的行为符合 POSIX 规范,它替换了某些转义字符。尝试使用 printf 代替:

$ printf '%s\n' "$X"
{
  "payload": "{\"data\":\"{\\"nested\\":1}\"}"
}