作者:潇洒嘉新 | 来源:互联网 | 2023-07-11 18:36
1.区别1:在使用单中括号判断变量能否为空的时候不加括号可能会出现异常单括号就是test命令。testn判断变量能否不为空,假如不为空那么表达式返回0通过,假如是空那么表达式返回1
1. 区别1: 在使用单中括号判断变量能否为空的时候不加括号可能会出现异常
单括号就是test命令。test -n
判断变量能否不为空,假如不为空那么表达式返回0通过,假如是空那么表达式返回1不通过。0代表True,1代表False。test -z
判断变量能否为空,假如为空表达式返回0,假如不为空返回False。下面以-z
为例,演示中括号判断变量的问题。
a=""[ -z $a ]echo $? # 0a="1"[ -z $a ]echo $? # 1
看上去没有什么问题。现在看一下-n
。
a="1"[ -z $a ]echo $? # 0a=""[ -z $a ]echo $? # 0
我们可以看到-n
不论怎样样都会通过。那么如何处理呢,可以两种处理方法:
a=""[ -n "$a" ]echo $? # 1[[ -n $a ]]echo $? # 1
2 区别2: 双括号使用&&
单括号使用-a
语法进行多重判断
[ 1 -gt 3 -a 1 -gt 3 ][[ 1 -gt 3 && 1 -gt 3 ]]
3 区别3: 正则匹配变量值只能用在双中括号
[[ $tel =~ [0-9]{10} ]]
4 区别4: >
在单括号使用需要加上\
PS:貌似zsh不支持,所以使用>
最好使用双括号
5 >
和-gt
的区别
>
比较的是对应字符ascii码,-gt
比较的肯定要为数字
6 加大括号引用变量区别
很简单,加大括号可以在引用变量的时候明确那个变量
? ~ a="zhangsan"? ~ echo ${a}bc zhangsanbc? ~
不加大括号就变成引用变量abc了
最后,尽量使用双中括号。