我正在尝试通过将对象读取到bash脚本变量中来读取json文件并从中获取单个对象。
这就是我希望做到的:
search_command="'.defines[] | select(.id==$current_id)'"
echo $search_command
out_json=`jq $search_command source.json`
其中current_id
是具有先前读取的id值的变量。当我运行此脚本时,“调试回显”的输出为预期值:
'.defines[] | select(.id==2)'
但是之后,我收到此消息:
jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
'.defines[]
jq: 1 compile error
当我使用以下参数在终端中直接拨打电话时
jq '.defines[] | select(.id==2)' source.json
我看到了期望的输出。
我对bash脚本还很陌生,所以我只能猜测不是jq部分是问题的根源,而是我尝试在bash中调用它的方式。我曾尝试删除search_command
内的空格,但是并没有太大变化(这次错误消息中包含search_command
的全部内容,因此我猜想这个更有效,但仍然不够有效。
答案 0 :(得分:1)
在定义search_command
时不要使用单引号,而在引用时将其用双引号引起来,例如:
search_command=".defines[] | select(.id==$current_id)"
out_json="$(jq "$search_command" source.json)"
答案 1 :(得分:0)
与任何其他语言一样,请勿使用字符串插值来定义命令。将current_id
作为参数传递给 static 过滤器。
search_command='.defines[] | select(.id==$x)'
out_json=$(jq --argjson x "$current_id" "$search_command" source.json)