linux括号的各种用法,详细解释,并分类对比

Linux Shell 括号用法完全指南:分类详解与对比

一、括号类型总览

括号类型 语法示例 主要用途 执行环境 是否创建子shell 兼容性
( ) 圆括号 (cmd1; cmd2) 子shell执行、数组、算术运算 子shell
{ } 花括号 { cmd1; cmd2; } 命令组、序列扩展 当前shell
[ ] 单中括号 [ -f file ] 条件测试(test命令) 当前shell
[[ ]] 双中括号 [[ $var == pattern ]] 增强条件测试 当前shell Bash
(( )) 双圆括号 (( a++ )) 算术运算 当前shell Bash

二、圆括号 ( ) 详解

1. 子shell执行

(cd /tmp; ls)  # 在子shell中执行
pwd            # 仍显示原目录

特点:

  • 创建新进程执行
  • 环境变量隔离
  • 性能开销较大

2. 数组定义

colors=(red green blue)
echo ${colors[1]}  # 输出green

3. 算术运算(两种形式)

echo $((3 + 5 * 2))  # 输出13
((count++))          # 自增操作

4. 进程替换

diff <(ls dir1) <(ls dir2)  # 比较两个目录

三、花括号 { } 详解

1. 当前shell命令组

{ var=123; echo $var; }  # 变量修改会影响当前shell

语法要求:

  • 左括号后必须有空格
  • 右括号前必须有分号

2. 序列扩展

echo {1..5}        # 1 2 3 4 5
echo {a..e}        # a b c d e
echo {01..10}      # 01 02...10
echo {1..10..2}    # 1 3 5 7 9

3. 文件名批量操作

cp file.{txt,bak}       # 等价于 cp file.txt file.bak
touch report_{1..3}.txt # 创建3个文件

四、单中括号 [ ] 详解

1. 条件测试

[ -f file.txt ] && echo "文件存在"

常用测试符:

  • -e 存在
  • -d 是目录
  • -s 非空文件
  • -nt 比...新

2. 字符串比较

[ "$str" = "value" ]  # 必须加引号
[ "$str" != "" ]      # 非空判断

3. 数值比较

[ "$num" -gt 10 ]     # 使用-gt而不是>

五、双中括号 [[ ]] 详解

1. 增强测试

[[ $var == *.txt ]]    # 模式匹配
[[ $str =~ ^[0-9]+$ ]] # 正则匹配

2. 逻辑运算

[[ -f file && -r file ]]  # 使用&&而不是-a

六、双圆括号 (( )) 详解

1. 算术运算

(( total = (a + b) * c ))
(( count++ ))

2. 数值比较

if (( a > b )); then
  echo "a大于b"
fi

七、关键对比表

条件测试对比:[ ] vs [[ ]]

特性 [ ] [[ ]]
实现 test命令 bash关键字
模式匹配 不支持 支持(==)
正则匹配 不支持 支持(=~)
逻辑运算符 -a/-o &&/||
变量引号 必须 可选
执行效率 较低 较高

命令执行对比:( ) vs

特性 ( ) { }
执行环境 子shell 当前shell
变量隔离
性能 较低 较高
语法要求 无特殊要求 需要空格和分号

八、高级用法示例

1. 安全文件处理

[[ -f "$file" && ( "$count" -gt 10 || "$force" == "yes" ) ]] && process_file

2. 批量目录创建

mkdir -p /data/{logs,backup}/{2020..2023}_{Q1..Q4}

3. 复杂算术运算

(( result = (a * b) + (c ** d) ))

九、最佳实践建议

  1. 条件测试:优先使用 [[ ]],需要兼容POSIX时用 [ ]
  2. 算术运算:总是使用 (( ))$(( ))
  3. 命令分组:需要变量隔离用 ( ),否则用 { }
  4. 变量安全:在 [ ] 中始终加引号
  5. 复杂逻辑:适当使用括号分组提高可读性

掌握这些括号的区别和适用场景,可以显著提高Shell脚本的健壮性和执行效率。

posted @ 2025-04-29 22:58  mofy  阅读(117)  评论(0)    收藏  举报