【问题标题】:jq: Accessing fields with - character in shell scriptjq:在 shell 脚本中使用 - 字符访问字段
【发布时间】:2015-12-17 15:36:41
【问题描述】:

我正在尝试使用 shell 脚本中的 jq 从以下 json 访问字段“my-tag”:

json 文件:

{
    "tag": {
        "value": "hello"
    },
    "my-tag": {
        "value": "hello-my-tag"
    }
}

Shell 脚本:

#!/bin/bash
main()
{
    search="my-tag"
    file="myjson.json"
    value=($(jq ".$search.value" "$file"))
    echo $value
}

main "$@"

在执行此脚本时,我收到以下错误:

error: tag is not defined
.-tag.value
^^^
1 compile error

如何在 shell 脚本中正确提取字段?

【问题讨论】:

  • .-tag.value 使它看起来像 shell 变量 $tag 不像您认为的那样包含 my-tag(而是包含 -tag)。你确定它的内容吗?

标签: json shell jq


【解决方案1】:

作为一般经验法则,我强烈建议不要将 shell 变量放在过滤器中,而是使用参数来传递它们。

jq --arg search "$search" '.[$search].value' "$file"

您的过滤器字符串相当于一个脚本。您不想每次更改值时都修改脚本,而是将其参数化。

【讨论】:

    【解决方案2】:

    您必须对任意键字符串使用关联数组表示法

    jq ".[\"$search\"].value" "$file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多