使用jq插值字符串

时间:2014-10-29 23:09:00

标签: linux bash jq

我正在使用jq来解析JSON数据,并根据作为命令行参数给出的动态键值来提取值。我注意到这有效,但我对如何在单引号中插入$v持怀疑态度。是否可以在双引号内重写表达式'.["\($v)"]'?我做错了什么?

尝试以下操作无论出于何种原因都不起作用:

recipe_url=$(cat ./*.json | jq -r --arg v "$recipe_key" ".[\"\\($v)\"]")

但是,这样做:

recipe_key='Wilted Greens' # example key to interpolate

recipe_url=$(cat ./*.json | jq -r --arg v "$recipe_key" '.["\($v)"]') # works!

2 个答案:

答案 0 :(得分:2)

你没有逃过$v,所以Bash认为它是一个Bash变量,可能是一个空变量。 试试这个

".[\"\\(\$v)\"]"
#       ^
#       |
#       --- notice

在我看来,在这种情况下最好使用单引号使用--arg--arg的实现类似于awk -v,以引用令人头疼的问题来解决这种情况。

答案 1 :(得分:1)

  

我注意到这有效,但我对如何在单引号中插入$ v持怀疑态度。

单引号插入变量或评估其他任何内容。

没有什么在单引号内是神奇的。你甚至无法在单引号内转义单引号。

您遇到的引用/转义问题仅存在,因为您在此处尝试使用双引号而不是单引号。