Bash中`if [ ! -z "$var" ] then`和`if [ "$var" ] then`用法有什么区别?
两段Bash变量检测代码的功能差异说明
你提供的两段代码都存在语法疏漏:
if语句的条件判断块([]部分)和then关键字之间,必须添加分号;或者换行分隔,否则执行会报错。
修正后的写法参考:# 写法1:加分号 if [ 判定条件 ]; then # 执行逻辑 fi # 写法2:换行 if [ 判定条件 ] then # 执行逻辑 fi
修正语法问题后,在所有符合POSIX标准的现代Shell(包含Bash)环境中,两段代码功能完全等价,没有任何差异,二者的作用都是检测变量$var的取值为非空字符串。
两段代码的逻辑解释
- 第一段的
[ ! -z "$var" ]:-z是Shell内置test命令(即[]对应的命令)的参数,作用是检测传入的字符串长度为0,前面加!取反后,就是检测字符串长度不为0。 - 第二段的
[ "$var" ]:这是test命令的简写规则,当[]内仅存在单个被双引号包裹的字符串参数时,默认执行非空检测逻辑,等价于完整写法[ -n "$var" ]。
额外注意
两段代码中对$var加双引号的写法是规范操作,如果去掉双引号,当$var未设置、取值包含空格或特殊字符时,可能会触发语法解析错误。
内容的提问来源于stack exchange,提问作者zovube
相关产品推荐
相关产品推荐

