【发布时间】:2014-10-29 23:08:59
【问题描述】:
我正在使用 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!
【问题讨论】:
-
你们俩都是对的,我能够从问题中得到两个观点。主要要关注的是为什么我错误地继续使用双引号并从中得出答案。这就是 Stackoverflow 的伟大之处。更重要的是要找到答案,而不是得到一个确定的答案。
-
我没有说“好”和“坏”。我表示不理解为什么当单引号避免任何和所有插值时,OP 要使用双引号,而这正是他试图避免的那种插值,以及他发布的 exact 问题是哪种插值关于。
-
@EtanReisner 我的观点是,为什么他想以“坏”的方式来做这件事并不重要。像我一样向他展示“坏”的方式,如果你愿意,还可以告诉他“更好”的方式,然后让他决定。
-
你一直在说“不好”。我没这么说。我是直接回应帖子中隐含的推理。他说他想避免插值,同时询问如何在刚刚启用插值而不是使用他开始使用的不插值的单引号时让他的代码工作。