代码之家  ›  专栏  ›  技术社区  ›  Seyfat Khamidov

Bash和echo命令出现意外结果

  •  0
  • Seyfat Khamidov  · 技术社区  · 2 年前

    我正在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格式错误时,为什么我会得到另一个输出。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Benjamin W.    2 年前

    你看到的叫做 brace expansion 。最简单的是,它看起来像

    $ 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"
      }"
    
    推荐文章