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

时间:2015-12-17 15:36:42

标签: json shell jq

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

2 个答案:

答案 0 :(得分:1)

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

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

您的过滤字符串与脚本等效。每次想要更改值时,您都不想修改脚本,您可以对其进行参数化。

答案 1 :(得分:0)

您必须对任意键字符串

使用关联数组表示法
jq ".[\"$search\"].value" "$file
相关问题