#bash

在 Bash 中,if 条件判断可以使用多种不同的括号形式,每种形式有不同的作用和语法规则:

1. if [ ] – 传统的 test 命令

示例:

if [ "$var" -eq 10 ]; then
    echo "var is 10"
fi

if [ -f "file.txt" ]; then
    echo "file exists"
fi

特点: – 不支持 &&||(要用 -a-o) – 不支持正则匹配 – 字符串比较用 =!= – 数值比较用 -eq, -ne, -lt, -gt

2. if [[ ]] – Bash 增强版条件表达式

示例:

if [[ $var == 10 ]]; then
    echo "var is 10"
fi

if [[ "$str" == *.txt ]]; then
    echo "str ends with .txt"
fi

if [[ $var -gt 5 && $var -lt 15 ]]; then
    echo "var is between 5 and 15"
fi

特点: – 支持 &&|| 逻辑运算符 – 支持正则匹配 =~ – 支持模式匹配 ==(如 *.txt) – 字符串比较可以用 ==!= – 不需要对变量严格加引号(但仍建议加)

3. if (( )) – 算术运算

示例:

if (( $var == 10 )); then
    echo "var is 10"
fi

if (( var > 5 && var < 15 )); then
    echo "var is between 5 and 15"
fi

if (( count++ > 10 )); then
    echo "count is now greater than 10"
fi

特点: – 使用类似 C 语言的算术运算符(==, !=, >, <, >=, <=) – 支持 ++, --, += 等自增/自减操作 – 变量可以不加 $ 前缀(但建议加上以提高可读性) – 不支持字符串操作,纯数值计算

总结比较

特性 [ ] (test) [[ ]] (( ))
用途 基本条件测试 增强条件测试 算术运算
逻辑运算符 -a, -o &&, `
字符串比较 =, != ==, != 不支持
数值比较 -eq, -ne -eq, -ne ==, !=, >, <
模式匹配 不支持 支持 (==, =~) 不支持
变量引用 必须加引号 可不加引号 可不加 $
POSIX 兼容

推荐用法