bash 使用 jq 变量添加属性

bash 使用 jq 变量添加属性

要将属性添加到 JSON 文本,我设法使用

result=$(jq -c '.docs[0] + { "value": "someValue" }'<<<"$fileContent")

但是如果我想用变量替换“someValue”:

result=$(jq -c '.docs[0] + { "value": ($value) }'<<<"$fileContent")

这给了我

jq: error: value/0 is not defined at <top-level>, line 1:
.docs[0] + { "value": ($value) }
jq: 1 compile error

我也尝试过不用大括号$value和内括号,[$value]但没有成功。

答案1

您的jq表达式在单引号内。这样$valueshell 就不会对其进行扩展。

相反,使用jqwith--arg为变量提供jqshell 变量的 JSON 编码值:

result=$(jq --arg value "$value" -c '.docs[0] + { "value": $value }' <<<"$fileContent")

相关内容