我有以下两个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错误
来正确地逃避该部分答案 0 :(得分:16)
只需使用变量即可省去麻烦:
< package.json jq --arg b "$BOO" '. + { foo: $b }'
--arg b "$BOO"
创建一个变量$b
,您可以在jq
中使用该变量,而无需处理引用问题。
那就是说,你的尝试失败的原因是你错过了一些文字双引号:
< package.json jq '. + { foo: "'"$BOO"'" }'
在命令的单引号部分中需要额外的双引号 ,因为在将命令字符串传递给jq
之前,shell会使用其他部分。
在shell变量包含任何引号的情况下,这仍然会失败,因此第一种方法是首选方法。