最常用也最可靠的方法是用 [ -z "$var" ] 判断变量是否为空字符串,它能同时捕获未定义变量和空字符串两种情况,且必须用双引号包裹变量以避免语法错误。

最常用也最可靠的方法是用 [ -z "$var" ] 判断变量是否为空字符串。
用 -z 检查空字符串
-z 的作用是测试字符串长度是否为 0。如果变量未定义、为空字符串或只含空白符(注意:严格来说,含空格的字符串不为空,但需配合 trim 处理),[ -z "$var" ] 返回真(退出状态 0)。
- 必须用双引号包裹变量,例如
"$var",否则变量为空时 shell 会把[ -z ]解析成只有操作符,语法错误 - 它能同时捕获未定义变量和空字符串两种情况
- 典型写法:
if [ -z "$name" ]; then echo "name is missing or empty"; fi
用 -n 检查非空字符串
-n 和 -z 逻辑相反,用于确认变量是否“有内容”。当字符串长度大于 0 时条件为真。
- 同样必须加双引号:
[ -n "$path" ],避免空值导致命令结构崩溃 - 适合做“存在性校验”,比如检查用户是否输入了参数:
if [ -n "$1" ]; then process "$1"; fi - 注意:含空格、制表符或换行符的字符串也被视为非空,
-n不做内容清洗
常见误区与加固建议
光靠 -z 或 -n 有时不够——比如变量是空格 var=" ",[ -z "$var" ] 会返回假,但它实质上没有有效值。
- 若需真正“无意义内容”判断,可先用
trim:例如trimmed=$(echo "$var" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//'),再对$trimmed用-z - 不要省略空格:
[ -z"$var" ]或[-z "$var"]都是错的;正确是[ -z "$var" ],中括号内外必须有空格 - 避免裸写
if [ $var ]——未引号 + 空值会导致语法错误甚至逻辑反转
其他可用方式(按推荐度排序)
除标准 [ ],还可使用更现代的 [[ ]],它对未引号变量容忍度稍高,但仍强烈建议加引号。
-
[[ -z $var ]]在大多数 bash 中不会报错,但行为依赖版本,不具可移植性 -
[[ $var == "" ]]或[[ $var =~ ^[[:space:]]*$ ]]可用于更精细匹配(如全空白) - 不推荐用
test -z $var替代[ -z "$var" ],两者等价但前者可读性差,且易漏空格











