shell脚本字符串运算符之-z和$的区别
下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否不相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否不为 0,不为 0 返回 true。 | [ -n “$a” ] 返回 true。 |
$ | 检测字符串是否不为空,不为空返回 true。 | [ $a ] 返回 true。 |
其中,-z 和 $ 的功能有异曲同工之妙,所以笔者想要对它们的区别一探究竟。脚本如下:
#!/bin/bash
a=""
b=" "
c="i"
d=" "
if [ "$a" ];then
echo "a不为空"
else
echo "a为空"
fi
if [ "$b" ];then
echo "b不为空"
else
echo "b为空"
fi
if [ "$c" ];then
echo "c不为空"
else
echo "c为空"
fi
if [ "$d" ];then
echo "d不为空"
else
echo "d为空"
fi
if [ -z "$a" ];then
echo "a长度为0"
else
echo "a长度不为0"
fi
if [ -z "$b" ];then
echo "b长度为0"
else
echo "b长度为${#b}"
fi
if [ -z "$c" ];then
echo "c长度为0"
else
echo "c长度为${#c}"
fi
if [ -z "$d" ];then
echo "d长度为0"
else
echo "d长度为${#d}"
fi
结果如下:
a为空
b不为空
c不为空
d不为空
a长度为0
b长度为1
c长度为1
d长度为2
从结果来看,在shell脚本中,空格被看作是普通字符。
结论:在shell中,字符串长度为0等价于字符串为空。所以字符串运算符 -z 和 $ 在使用上没有区别。