如何转义双引号并在 JQ 中使用环境变量

How to escape a double quotation marks AND using a env var in JQ

我有以下文件:data.txt

{
  "1": {
    "job": "Plumber",
    "age": "23"
  },
  "2": {
    "job": "SEO",
    "age": "45"
  }
}

而且我可以毫无问题地执行以下查询:

jq --raw-output '."2".job' data.txt

但是,在我正在执行的脚本中,数字是从另一个命令给出的,为简单起见,与下一个命令类似。并且在执行它时,它没有很好地解析变量或引号。所以结果为空。

ID=$(echo "2")
jq --raw-output '."$ID".job' README.md

我试过用 \ 转义变量,用 \ 转义引号,用 \ 转义两者。还要使用 --arg.["$env.ID"] 以及我想到的所有内容。不成功。如果有人知道如何同时解析引号和变量,我将不胜感激, 问候。

您正在尝试使用字符串解释来构建 JQ 过滤器,这通常是错误的做法。

相反,将数字作为 参数 传递给过滤器。

ID=2
jq --raw-output --arg x "$ID"  '.[$x].job' data.txt
# jq --raw-output --argjson x "\"$ID\"" '.[$x].job' data.txt

# ID='"2"'
# jq --raw-output --argjson x "$ID" '.[$x].job' data.txt

--arg 将值编码为 JSON 字符串; --argjson 假定该值已经是 JSON 值。