如何将bash变量作为jq的键传递?

k_v*_*ath 1 bash shell jq

这是示例json

{
   "app": "K8s",
   "version": "1.8",
   "date": "2018-10-10"
}
Run Code Online (Sandbox Code Playgroud)

为了获得应用程序的价值,我可以在jq中这样做

jq '.app'
Run Code Online (Sandbox Code Playgroud)

但是我想要的是,我想将密钥作为bash变量传递给jq,即

bash_var="app"
jq '."${bash_var}"'
Run Code Online (Sandbox Code Playgroud)

我得到的输出为null而不是值。实现此目的的正确语法是什么?

Ini*_*ian 5

首先,您需要使用标记将bash变量移植到jq的上下文中,--arg并在[..]

jq --arg keyvar "$bash_var" '.[$keyvar]' json
Run Code Online (Sandbox Code Playgroud)

  • @JaroslavBezděk:当 $bash_var 包含 `"` 或由 `jq` 解释的任何其他字符时,很容易中断。 (3认同)
  • 我认为您不必将“bash”变量移植到“jq”的上下文中。您可以简单地通过以下方式实现目标:`jq ".$bash_var"` (2认同)