Linux Shell 脚本中括号类型及用途
1. 圆括号 ()
用途:用于命令分组或子shell执行。
示例:
( command1; command2 ) # 在子shell中执行命令,不影响当前环境
result=$(command) # 命令替换,将命令输出赋值给变量
数学运算(需配合 $(( ))
):
echo $(( 5 + 3 )) # 输出8
2. 花括号 {}
用途:用于代码块、变量扩展或序列生成。
示例:
{ command1; command2; } # 在当前shell执行代码块(注意末尾分号和空格)
echo {1..5} # 输出1 2 3 4 5(序列生成)
echo ${var:-default} # 变量扩展,若var未定义则返回default
注意:
- 代码块末尾需有分号和空格。
- 变量扩展时避免与重定向冲突(如
${var}>file
)。
3. 方括号 []
和 [[]]
单方括号 []
:
- 等效于
test
命令,用于条件测试。 - 需严格保留空格和运算符。
if [ "$a" -eq 5 ]; then # 数值比较echo "a等于5"
fi
双方括号 [[]]
:
- 更强大的条件测试,支持模式匹配和逻辑运算符(如
&&
、||
)。
if [[ "$str" == *"match"* ]]; then # 字符串模式匹配echo "包含match"
fi
4. 尖括号 <>
用途:主要用于重定向。
示例:
command < input.txt # 输入重定向
command > output.txt # 输出重定向
command 2> error.log # 错误输出重定向
5. 双圆括号 (())
用途:专门用于算术运算。
示例:
(( count++ )) # 变量自增
if (( a > b )); then # 数值比较echo "a大于b"
fi
常见问题及注意事项
- 空格要求:
[]
和[[]]
内必须保留空格(如[ "$a" -eq 1 ]
),而(())
和$(())
不需要。 - 字符串比较:在
[[]]
中使用==
或!=
进行模式匹配,[]
中需用=
或-eq
。 - 变量引用:在
[]
中引用变量需加双引号(如"$var"
),避免空值错误。
总结
- ():子shell执行或数组初始化。
- (( )):算术运算与逻辑判断。
- []:基础条件测试。
- [[]]:高级条件测试(支持通配符)。
- {}:序列扩展、变量操作。
- $():命令输出捕获。
- $(( )):算术结果捕获。