我正在 bash 中运行 echo 命令,我看到了一些意想不到的结果。
跑步时:
echo "{
"outputs": {
"result": "[{\"directory\":\"mydir\",\"somekey\":\"somevalue\"}]"
},
"outcome": "success",
"conclusion": "success"
}"
输出为:
{
outputs: {
result: ["directory":"mydir"]
},
outcome: success,
conclusion: success
} {
outputs: {
result: ["somekey":"somevalue"]
},
outcome: success,
conclusion: success
}
我知道结果键不是有效的 json,但为什么输出似乎迭代结果数组中的值并输出对象?是什么原因导致 bash 或 echo 命令端出现此问题?
如果我从结果数组的开头和结尾删除双引号,它会按预期输出整个 json blob,但很好奇为什么当 json 格式错误时我会得到其他输出。
您所看到的称为括号扩展。最简单的是,它看起来像
$ echo {a,b}
a b
如果大括号嵌入在字符串中,则整个字符串会重复:
$ echo prefix{a,b}suffix
prefixasuffix prefixbsuffix
重要的是,当大括号被引用时,扩展不会发生:
$ echo "prefix{a,b}suffix"
prefix{a,b}suffix
就您而言,
prefix
是
"{
"outputs": {
"result": "[
a
是
\"directory\":\"mydir\"
b
是
\"somekey\":\"somevalue\"
和
suffix
是
]"
},
"outcome": "success",
"conclusion": "success"
}"