在jq中逃脱报价

时间:2017-06-13 08:23:54

标签: bash shell jq

我有以下两个bash行

TMPFILE="$(mktemp)" || exit 1

< package.json jq '. + {"foo":'"${BOO}"'}' > "$TMPFILE"

但是我收到以下错误:

jq: error: syntax error, unexpected '}' (Unix shell quoting issues?) at <top-level>, line 1:
. + {"foo":}
jq: 1 compile error

任何想法如何通过在那里使用双引号来清除shellcheck错误

来正确地逃避该部分

1 个答案:

答案 0 :(得分:16)

只需使用变量即可省去麻烦:

< package.json jq --arg b "$BOO" '. + { foo: $b }'

--arg b "$BOO"创建一个变量$b,您可以在jq中使用该变量,而无需处理引用问题。

那就是说,你的尝试失败的原因是你错过了一些文字双引号:

< package.json jq '. + { foo: "'"$BOO"'" }'

在命令的单引号部分中需要额外的双引号 ,因为在将命令字符串传递给jq之前,shell会使用其他部分。

在shell变量包含任何引号的情况下,这仍然会失败,因此第一种方法是首选方法。