示例脚本:
#!/bin/bash
printf '1\n1\n1\n1\n' | ./script2*.sh >/dev/null 2>/dev/null
Shellcheck 返回以下内容:
In script1.sh line 3:
printf '1\n1\n1\n1\n' | ./script2*.sh >/dev/null 2>/dev/null
^-- SC2211: This is a glob used as a command name. Was it supposed to be in ${..}, array, or is it missing quoting?
根据https://github.com/koalaman/shellcheck/wiki/SC2211,这条规则应该没有例外。
具体来说,它建议“如果您想通过 glob 指定命令名称,例如在 ./myprogram-*/foo 中不硬编码版本,请先扩展为数组或参数以允许处理 0 或 2+ 匹配的情况。”
我首先使用 glob 的原因是我将日期附加或更改到我刚刚创建或更改的任何脚本。有趣的是,当我使用“bash script2*.sh”而不是“./script2*.sh”时,抱怨就消失了。
我是否解决了这个问题,或者我在欺骗 shellcheck 忽略一个不应该被忽略的问题?如果我使用错误的 bash 语法,我如何执行另一个需要以正确方式使用 glob 的脚本?