【发布时间】:2013-09-17 13:05:38
【问题描述】:
我在 shell 脚本中多次看到他们在 if 比较中使用 "_",如下所示:
if [ "_$str" = "_" ]; then ....; fi
上面的代码通过比较if [ "_$str" = "_" ]检查str变量是否为空。
为什么不用if [ "$str" = "" ]?为什么要在两个字符串中添加"_"?
【问题讨论】:
-
这似乎是跳过空字符串比较的好方法。在两个字符串中附加一个字符可以避免极端情况并保留结果。
-
只需使用
[ -z "${str}" ]。 -
@devnull 有趣的是,该命令将在受影响的 shell 中间接成功。如果
$str为空,扩展将被错误地删除,留下[ -z ]。但是,这可能会被视为非空字符串(不是运算符-z),无论如何都会评估为真。