1. 区别1: 在使用单中括号判断变量是否为空的时候不加括号可能会出现异常
单括号就是test命令。test -n
判断变量是否不为空,如果不为空那么表达式返回0通过,如果是空那么表达式返回1不通过。0代表True,1代表False。test -z
判断变量是否为空,如果为空表达式返回0,如果不为空返回False。下面以-z
为例,演示中括号判断变量的问题。
a=""
[ -z $a ]
echo $? # 0
a="1"
[ -z $a ]
echo $? # 1
看上去没有什么问题。现在看一下-n
。
a="1"
[ -z $a ]
echo $? # 0
a=""
[ -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了
最后,尽量使用双中括号。
网友评论