Bash 和 echo 命令出现意外结果

问题描述 投票:0回答:1

我正在 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 格式错误时我会得到其他输出。

json bash echo
1个回答
0
投票

您所看到的称为括号扩展。最简单的是,它看起来像

$ 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"
  }"
© www.soinside.com 2019 - 2024. All rights reserved.