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)
猜测- 因为你确实没有包含有关该问题的足够信息 - 你正在做类似的事情
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
变量名 - 但这是另一天的战斗