您的位置:首页 > 运维架构 > Shell

认识 Shell 脚本里的中括号们——分析“[]”与“[[]]”的区别

2016-12-16 00:00 323 查看
摘要: `[` 属于 Shell 的内建命令,`[[` 属于 Shell 的保留关键字。

因为
test
[
是等价的,我们在之后的部分也偶尔提到它。

我们先使用
type
命令检查一下:

$ type "test" "[" "[["
test is a shell builtin
[ is a shell builtin
[[ is a reserved word

test
[
属于 Shell 的内建命令,
[[
属于 Shell 的保留关键字。

而在使用上,
test
[
等价:

$ test -f file && echo True
True

$ [ -f file ] && echo True
True

因为是命令,所以需要跟它的参数使用空格隔开,然后
]
作为最后一个参数表示条件结束,而像
<
>
符号就会被理解为重定向,导致错误:

$ [ 1 < 2 ]
zsh: no such file or directory: 2

而关键字不同,所以
[[
能够按照常规的语义理解其中的内容:

$ [[ 1 < 2 ]] && echo True || echo False
True

双中括号中的表达式看作一个单独的语句,并返回其退出状态码。

而逻辑与(and)和逻辑或(or)在
[
[[
中的用法也不同:

[
中使用
-a
-o
参数连接不同的条件,
[[
中使用
&&
||


$ [ $a == 1 && $b == 1 ] && echo True || echo False
[: ']' expected
False

$ [ $a == 1 -a $b == 1 ] && echo True || echo False
True

$ [[ $a == 1 && $b == 1 ]] && echo True || echo False
True

最后,推荐使用
[[
来进行各种判断,这能避免很多错误,比如
$a
为空的情况下,
[ $a == 1 ]
就是语法错误,因为
[
命令拿到的实际上只有
==
1
]
三个参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Shell