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"
您的过滤字符串相当于一个脚本。您不会希望每次更改值时都修改脚本,您会对其进行参数化。
我正在尝试使用 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"
您的过滤字符串相当于一个脚本。您不会希望每次更改值时都修改脚本,您会对其进行参数化。