Json jq:在shell脚本中使用-字符访问字段
我正在尝试使用shell脚本中的jq从以下json访问字段“my tag”: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": {
#!/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
)。你确定它的内容吗?