jq:在 shell 脚本中使用 - 字符访问字段

jq: Accessing fields with - character in shell script

我正在尝试使用 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 脚本中正确提取字段?

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

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

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

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

您的过滤字符串相当于一个脚本。您不会希望每次更改值时都修改脚本,您会对其进行参数化。