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