在阅读这个流行的问题之前,我写了一些bash。我注意到我做事的方式没有出现在任何答案中,所以我很好奇我的逻辑是否存在我没有看到的危险/错误。
if [ ! $1 ] || [ $2 ]; then
echo "Usage: only one var." && exit 1
fi
如您所见,我正在测试命令行上是否只有一个参数。据我测试,这是有效的。有人可以将更多知识传递给新的bash用户吗?
./script one '' oops
当$2
为空字符串时,[ $2 ]
将为 false。
正如另一个人在评论中指出的那样,bash将拆分两个字符串,从而打开一系列问题,包括潜在的安全漏洞。
这更清楚:
if [ $# != 1 ] ; then
echo "Usage: only one var."; exit 1
fi
会破坏测试的事情:
- 第一个参数为空 (
""
) - 第二个参数为空 (
""
) - 第一个或第二个参数具有更多单词 (
"bla bla"
) - 参数包含将由
test
解释的内容(例如:-z
)
它根本不比使用$#
更清楚。此外,我必须考虑所有可能破坏代码的极端情况这一事实使它变得劣质。