“()“,“(())“和“[]“,“[[]]“几个符号的区别

1. 圆括号比较:() vs (())

() 单圆括号:
  • 主要用途
    # 1. 创建子shell环境
    (cd /tmp; ls)  # 不影响当前目录
    
    # 2. 命令替换
    result=$(ls)
    version=$(uname -r)
    
(()) 双圆括号:
  • 主要用途:算术运算
    # 1. 基本运算
    ((a=1+2))
    ((b=a*3))
    
    # 2. 自增自减
    ((c++))
    ((d--))
    
    # 3. 条件判断
    if ((a > b))
    

2. 方括号比较:[] vs [[]]

[] 单方括号:
  • 主要用途:测试命令(等同于test命令)
# 1. 数值比较
[ "$a" -eq "$b" ]
[ "$a" -lt "$b" ]

# 2. 字符串比较
[ "$str" = "test" ]
[ -n "$str" ]

# 3. 文件测试
[ -f "$file" ]
[ -d "$dir" ]
[[]] 双方括号:
  • 主要用途:bash的条件测试增强版
# 1. 正则匹配
[[ $str =~ ^[0-9]+$ ]]

# 2. 通配符
[[ $file == *.txt ]]

# 3. 逻辑运算
[[ $a -eq 1 && $b -eq 2 ]]

3. 主要区别对照表

特性()(())[][[]]
主要用途子shell/命令替换算术运算条件测试增强条件测试
变量引用需要$不需要$需要$不需要$
空格处理不敏感不敏感敏感不敏感
正则支持
通配符

4. 使用示例对照

# 1. 变量处理
var="test string"
(echo $var)         # 子shell中执行
((a = 5))          # 算术赋值
[ "$var" = "test" ]  # 需要引号
[[ $var = "test" ]]  # 不需要引号

# 2. 条件判断
# 算术比较
((5 > 3))          # 算术比较
[ "$a" -gt "$b" ]   # 数值比较
[[ $a -gt $b ]]     # 增强数值比较

# 3. 字符串操作
[ "$str1" = "$str2" ]   # 字符串相等
[[ $str1 == $str2 ]]    # 字符串相等(更灵活)

# 4. 逻辑运算
[ $a -eq 1 -a $b -eq 2 ]    # AND运算
[[ $a -eq 1 && $b -eq 2 ]]  # AND运算(更直观)

5. 最佳实践建议

  1. 使用 (()) 当:

    • 需要进行算术运算
    • 需要自增自减操作
  2. 使用 () 当:

    • 需要在子shell中执行命令
    • 需要命令替换
  3. 使用 [[]] 当:

    • 进行字符串或文件测试
    • 需要使用正则表达式
    • 需要使用通配符
    • 在bash脚本中
  4. 使用 ]` 当:

    • 需要POSIX兼容性
    • 在非bash shell中运行脚本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值