在Shell脚本中,中括号([ ... ]
和 [[ ... ]]
)是一种常见的条件测试结构。它们用于进行文件类型检查、值比较以及逻辑判断。通过了解它们的不同特点和用法,能够帮助你编写更加高效、安全且易读的脚本。本文将详细介绍Shell中单中括号和双中括号的区别、语法、常见用法及一些注意事项。
单中括号
单中括号([ ... ]
)也叫做 test
命令,它是Shell中最基本的条件判断工具之一。这个结构用于测试文件属性、比较数值和字符串,以及进行简单的逻辑判断。
有些人可能会感到困惑,为什么一个是符号,另一个是命令,二者却可以等价。其实,原理很简单:当Shell遇到左中括号([
)时,它会将其视作一个命令,并将中括号内的内容作为 test
命令的参数来解析,直到遇到右中括号(]
)为止。因此,[ ... ]
其实就是 test
命令的一种简写形式。
1. 基本语法
单中括号的基本语法如下:
[ expression ]
在单中括号中,expression
代表一个条件表达式。其返回值为真(0
)或假(1
),这通常用于 if
语句的条件判断中。例如:
if [ "$var" == "hello" ]; then
echo "字符串匹配"
fi
2. 使用限制与特点
- 空格要求:在
[
和]
之间以及表达式的各个元素之间需要留有空格。例如,[ $x -gt 10 ]
是正确的,而[ $x-gt 10]
会报错。 - 特殊字符需要转义:在单中括号中,一些特殊字符(如
<
,>
,|
等)需要使用反斜杠(\
)进行转义。
下面重点介绍双中括号,因为它更现代、更强大。
双中括号
双中括号([[ ... ]]
)是Bash中引入的一种条件测试结构。它比传统的 [ ... ]
(即 test
命令)更加强大和灵活。双中括号不仅支持更多的比较操作符,还具备更强的语法功能和更少的限制,使得它成为编写Bash脚本时更推荐使用的工具。
1. 基本语法
双中括号的基本语法如下:
[[ expression ]]
它和 [ ... ]
类似,但有许多额外的功能和改进。最常见的用法包括字符串比较、数值比较、文件测试等。
2. 与单中括号的区别
-
扩展的比较操作符:
双中括号支持更多的比较操作符。例如,字符串的模式匹配、正则表达式匹配等。 -
无需转义特殊字符:
在双中括号中,许多特殊字符(如<
,>
,|
等)不需要像[ ... ]
中那样进行转义。 -
支持逻辑运算符: