[ $var ] 是检查 bash 中变量设置/空的可接受方法吗?



在阅读这个流行的问题之前,我写了一些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

它根本不比使用$#更清楚。此外,我必须考虑所有可能破坏代码的极端情况这一事实使它变得劣质。

最新更新