我正在使用 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!

最佳答案

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

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

在我看来,在这种情况下使用带单引号的 --arg 会更好。 --arg 的实现类似于 awk -v ,以准确解决这种类型的引用问题。

关于linux - 使用 jq 插入字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26642231/

10-14 18:34