在jq中逃脱报价

Maz*_*zzy 6 bash shell jq

我有以下两个bash行

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

< package.json jq '. + {"foo":'"${BOO}"'}' > "$TMPFILE"
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

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

任何想法如何通过在那里使用双引号来使shellcheck错误静音来正确地逃避该部分

Tom*_*ech 19

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

< package.json jq --arg b "$BOO" '. + { foo: $b }'
Run Code Online (Sandbox Code Playgroud)

--arg b "$BOO"创建一个$b可以在里面使用的变量jq,而不必处理引用问题.

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

< package.json jq '. + { foo: "'"$BOO"'" }'
Run Code Online (Sandbox Code Playgroud)

需要在命令的每个单引号部分内添加额外的双引号,因为在传递命令字符串之前shell会使用其他引号jq.

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