我正在使用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!
答案 0 :(得分:2)
你没有逃过$v
,所以Bash认为它是一个Bash变量,可能是一个空变量。
试试这个
".[\"\\(\$v)\"]"
# ^
# |
# --- notice
在我看来,在这种情况下最好使用单引号使用--arg
。 --arg
的实现类似于awk -v
,以引用令人头疼的问题来解决这种情况。
答案 1 :(得分:1)
我注意到这有效,但我对如何在单引号中插入$ v持怀疑态度。
单引号不插入变量或评估其他任何内容。
没有什么在单引号内是神奇的。你甚至无法在单引号内转义单引号。
您遇到的引用/转义问题仅存在,因为您在此处尝试使用双引号而不是单引号。