我有以下两个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变量包含任何引号的情况下,这仍然会失败,因此第一种方法是首选方法.