假设我有一个 shell 脚本,test.sh
它应该回显一些值。我希望能够通过具有全局扩展的环境变量传递这些值:
$ ls
1.js 2.js test.sh*
$ FOO="*.js" bash ./test.sh
1.js 2.js
简单,你说!写吧
#!/bin/bash
echo $FOO
确实,这行得通。但它没有通过ShellCheck,这要求我们使用隐式通配/扩展(SC2086)。(这是公平的;在原始代码中, echo 行是cp $FOO $BAR
,我们确实不想扩展$BAR
;这个错误会捕获错误。)
因此,为了使这一点更加明确,我希望以下内容可能会起作用:
#!/bin/bash
array=( $FOO )
echo "${array[@]}"
但没有:我们最终得到SC2206。
有没有一种规范的方式来做这种事情,这属于 ShellCheck 作者认为的最佳实践?(请随意使用 www.shellcheck.net 上的在线检查器进行测试。)这完全是错误的方法吗?ShellCheck 作者似乎不太可能从未想过这个用例......