我正在尝试使用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脚本中正确提取字段?
答案 0 :(得分:1)
作为一般的经验法则,我强烈建议不要在过滤器中放置shell变量,并使用参数传递它们。
jq --arg search "$search" '.[$search].value' "$file"
您的过滤字符串与脚本等效。每次想要更改值时,您都不想修改脚本,您可以对其进行参数化。
答案 1 :(得分:0)
您必须对任意键字符串
使用关联数组表示法jq ".[\"$search\"].value" "$file