Linux Shell中判断字符串为空用-z/-n,相等用=或==,必须加双引号防解析错误;空值与相等常组合使用,数字比较须用-eq等专用运算符。

Linux Shell 中判断字符串是否为空或相等,主要靠 [ ](test 命令)配合特定运算符实现。关键不是记命令,而是理解每个运算符的语义和使用细节。
判断字符串是否为空
用 -z 和 -n 最稳妥:
-
[ -z "$str" ]:字符串长度为 0 时为真(即为空或未定义),适合做“空值检查” -
[ -n "$str" ]:字符串长度 > 0 时为真(即非空),等价于直接写[ "$str" ] - 务必给变量加双引号,比如
"$str",否则当str=""时,[ -z $str ]会变成[ -z ],语法错误 - 常见写法示例:
if [ -z "$USER_INPUT" ]; then echo "请输入内容"; fi
判断两个字符串是否相等
推荐用 =(POSIX 标准,兼容性好)或 ==(bash 扩展,功能相同):
-
[ "$a" = "$b" ]:两边字符串内容完全一致(包括空格、大小写)才为真 -
[ "$a" != "$b" ]:内容不一致时为真 - 同样必须加双引号,否则若任一变量含空格或为空,会导致语法解析失败
- 错误示范:
[ $a = $b ]—— 变量未引号包裹,遇空值或带空格内容会报错
实际脚本中常用组合
空值 + 相等常一起用,避免逻辑漏洞:
- 先确认非空,再比较:
if [ -n "$input" ] && [ "$input" = "yes" ]; then ... fi - 用
!取反更清晰:if [ ! -z "$name" ] && [ "$name" != "default" ]; then ... fi - 注意:
=和!=只用于字符串;数字比较必须用-eq、-ne等,混用会出错
小提醒:别踩这些坑
容易忽略但影响稳定性:
-
=两侧必须有空格,[ "$a"="$b" ]是错的,会当成一个参数传给 test -
[[ ]]比[ ]更安全(支持模式匹配、自动引用),但不是所有 shell 都支持(如 dash) - 未定义变量默认为空,所以
[ -z "$undefined_var" ]总是返回真,无需额外判 undefined


















