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

bt365体育平台3 2026-02-20 09:37:22 admin 3824 161
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) ))

九、最佳实践建议

条件测试:优先使用 [[ ]],需要兼容POSIX时用 [ ]

算术运算:总是使用 (( )) 和 $(( ))

命令分组:需要变量隔离用 ( ),否则用 { }

变量安全:在 [ ] 中始终加引号

复杂逻辑:适当使用括号分组提高可读性

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

相关推荐