认识 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] 三个参数。

转载于:https://my.oschina.net/tridays/blog/807162

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值