外壳检查失败

max*_*att 1 command-line bash scripts

我的 shell 脚本和 shellcheck.net 有问题。下面的脚本就像一个魅力,但 shellcheck 告诉我必须引用变量,但在脚本中引用变量会阻止脚本工作(我需要分词)。

有人能帮助我吗?

apt-get $COMMAND -y -qq $PACKAGES >/dev/null &
        ^-- SC2086 (info): Double quote to prevent globbing and word splitting.
                        ^-- SC2086 (info): Double quote to prevent globbing and word splitting.
Run Code Online (Sandbox Code Playgroud)

ste*_*ver 5

猜测- 因为你确实没有包含有关该问题的足够信息 - 你正在做类似的事情

PACKAGES='foo bar baz'
Run Code Online (Sandbox Code Playgroud)

然后当你用双引号引用变量时,例如

apt-get "$COMMAND" -y -qq "$PACKAGES"
Run Code Online (Sandbox Code Playgroud)

apt-get命令失败并出现类似 的错误E: Unable to locate package foo bar baz。换句话说,您依赖 shell 的默认分词行为将未加引号的扩展转换$PACKAGES为单独的标记。

在 bash 中解决这个问题的正确方法是使用数组变量:

PACKAGES=(foo bar baz)

apt-get "$COMMAND" -y -qq "${PACKAGES[@]}"
Run Code Online (Sandbox Code Playgroud)

也可以看看:

我还建议避免使用 ALLCAPS 变量名 - 但这是另一天的战斗