You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:24:02