前言
Shell 脚本中经常用到字符串,对字符串是否为空的判断很关键。
正文
在 Shell 中利用 -n
来判断字符串是否非空。
例子:
if [[ str1 = str2 ]] # 当字符串 str1 和 str2 有相同内容、长度时为真
if [[ str1 != str2 ]] # 当字符串 str1 和 str2 不等时为真
if [[ -n "str1" ]] # 当字符串 str1 的长度大于 0(非空)时为真
if [[ -z "str1" ]] # 当字符串 str1 的长度为 0(空)时为真
if [[ str1 ]] # 当字符串 str1 为非空时为真
注意
错误用法:
str1=$*
if [[ -n $str1 ]];then
print "with str1"
else
print "without str1"
fi
这种情况下不管传不传参数,总会进入 if 里面,因为不加 ""
时该 if 语句等效于 if [ -n ]
,shell 会把它当成 if [ str1 ]
来处理,-n
这个字符串不为空,所以会进入 if 里面。
正确用法:
需要在 $str1
上加入双引号,即 "$str1"
。
str1=$*
if [[ -n "$str1" ]];then
print "with str1"
else
print "without str1"
fi
额外内容
在 Shell 脚本中如果有 rm -rf ${path}
这种操作,尽量在执行前先判断变量 path
不为空,如果 path
为空,等同于执行 rm -rf /
,除此之外,在 Bash 的变量扩展语法中,可以用 rm -rf ${path:?ERROR}/*
的形式判断变量是否定义或为空,当变量未定义或为空时自动停止执行脚本,这样可以避免执行全局删除操作。