Bash脚本中if条件判断用法解析 #bash

在 Bash 脚本中,if [ false ]; then ... fi 的行为可能和你预期的不一样。让我解释一下:

问题分析

当你写 if [ false ]; then ... fi 时,实际上发生的是:

  1. [ false ] 是一个 test 命令([test 命令的别名)
  2. 它检查字符串 “false” 是否非空
  3. 因为 “false” 是一个非空字符串,所以 test 命令返回 true(退出状态码 0)

正确写法

如果你想要检查一个命令的返回状态(比如 false 命令),应该这样写:

if false; then
    echo "This won't execute"
else
    echo "This will execute"
fi

或者如果你想使用 test 命令检查布尔条件:

if [ "$var" = false ]; then
    echo "var is the string 'false'"
fi

其他常见用法

  1. 检查命令是否成功:

    if some_command; then
    echo "Command succeeded"
    fi
    
  2. 检查变量是否为真值:

    if [ "$var" = true ]; then
    echo "var is true"
    fi
    
  3. 使用算术比较:

    if (( 1 == 1 )); then
    echo "Math is correct"
    fi
    

记住在 Bash 中,truefalse 实际上是命令(返回 0 和非 0 退出状态),而不是布尔值。