如何转义双引号并在 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 值。
我有以下文件: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 值。