shell条件表达式小结:test([])与 [[]]

本文介绍了Bash中用于条件判断的两种机制:内置的`test`函数([])和扩展的`[[`关键字。虽然两者在很多情况下表现相似,但`[[`提供了更丰富的功能,如通配符匹配(`==`)和正则表达式匹配(`=~`)。在使用中,`[[`避免了空操作符导致的错误,并且在内部不进行文字分割和文件名扩展,但仍然执行其他类型的扩展。此外,通配符匹配时,`[[`将右侧视为pattern,而正则匹配时,引号不是必需的。
摘要由CSDN通过智能技术生成

在info bash里的第“6.4 Bash Conditional Expressions”节里开头有一句话说明了shell条件判断的二个机制:

Conditional expressions are used by the `[[' compound command and the
`test' and `[' builtin commands.

 

 

机制一:内置(builtin)的函数test(运算符[]),此部分完整的说明,可查看“4.1 Bourne Shell Builtins”

 

机制二:[[]],条件结构关健字,具体可查看“3.2.4.2 Conditional Constructs”

 

 

test跟[]是一回事,只不过一个以函数的形式,一个以成对操作符的形式出现,

test包含6.4节条件表达式的表达形式,

是函数就有参数,test对1、2、3.。。6等多个参数的判断分别进行定义

 

 

而[[]],大部分的功能跟[]是一样的,可以简单理解成[]的扩展,但对于参数的判断定义上,比test有更完整的定义,不容易出现[]中的错误

比如在-eq比较的右操作符中,[]要求右操作符不为空,否则报错,返回2,而[[]]则不会:

[root@localhost tmp]# [ 1 -eq  $a ]    
+ '[' 1 -eq ']'
-bash: [: 1: unary operator expected
[root@localhost tmp]# echo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值