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

Json jq:在shell脚本中使用-字符访问字段,json,shell,jq,Json,Shell,Jq,我正在尝试使用shell脚本中的jq从以下json访问字段“my tag”: #!/bin/bash main() { search="my-tag" file="myjson.json" value=($(jq ".$search.value" "$file")) echo $value } main "$@" json文件: { "tag": { "value": "hello" }, "my-tag": {

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

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

main "$@"
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"

您的筛选器字符串相当于脚本。您不希望每次更改值时都修改脚本,您可以将其参数化。

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