【发布时间】:2018-02-06 11:08:48
【问题描述】:
假设我有一个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 作者似乎不太可能从未想过这个用例......
【问题讨论】:
-
在 Twitter 上有人提到
printf %q和xargs: twitter.com/stuartpb/status/902411014724976641 。也许有人知道这些会有什么用。
标签: bash shell shellcheck