如何明确故意分词?

And*_*eas 2 bash sh shellcheck

我在我的脚本上运行shellcheck并且经常收到这个警告(在这种情况下是正确的,因为cd foo bar baz没有意义):

cd ${SOME_DIR} || exit 1
   ^-- SC2046: Quote this to prevent word splitting.
Run Code Online (Sandbox Code Playgroud)

这个警告主要是一个好的警告。变量包含多个参数时的一种例外情况:

gcc ${OPTIONS} ...
    ^-- SC2046: Quote this to prevent word splitting.
Run Code Online (Sandbox Code Playgroud)

是否有关于故意分词的约定更明确,可能会避免此 shellcheck 警告?

Léa*_*ris 8

当没有拆分的意图时,只需添加双引号:

cd "${SOME_DIR}" || exit 1
Run Code Online (Sandbox Code Playgroud)

执行显式拆分为数组:

read -ra gcc_options <<<"${OPTIONS}"
gcc "${gcc_options[@]}"
Run Code Online (Sandbox Code Playgroud)

或者为下一条语句禁用 shellcheck,表示您已检查操作符合意图:

# shellcheck disable=SC2086 # Intended splitting of OPTIONS
gcc ${OPTIONS}
Run Code Online (Sandbox Code Playgroud)

  • 第二个不应该是`read -ra gcc_options &lt;&lt;&lt; "$OPTIONS"`吗?使用“mapfile”,您需要将选项放在单独的行上。 (2认同)