测试命令中的 -z 选项是什么(linux)

测试命令中的 -z 选项是什么(linux)

在我的一个实验室教程中,有一个需要检查的命令。

test -z $LOGNAME || echo Logname is not defined

当我执行此命令时,输出为“Logname 未定义”。测试手册页显示

> -z STRING
>               the length of STRING is zero

当我回显 $LOGNAME 时,它会打印出我的登录名。因此,$LOGNAME 有一个值。在上面的第一个命令中,由于执行了命令的右侧部分,因此意味着左侧部分返回了 false。为什么 $LOGNAME 有值时会返回 false?

答案1

线路

test -z $LOGNAME || echo Logname is not defined

是一个或列表,可以翻译为:

echo Logname is not defined 如果 test -z $LOGNAME 失败

正如您在问题中提到的,test -z $LOGNAME测试是否$LOGNAME为零长度...并且由于不是,测试失败。替换||&&以下内容将为您提供所需的行为:

test -z $LOGNAME && echo Logname is not defined

编辑:根据下面 William Pursell 的评论,test -n(测试非零长度字符串)||可能更具概念意义,但在这种情况下需要引用$LOGNAME(事实上,养成引用变量的习惯是个好主意):

test -n "$LOGNAME" || echo Logname is not defined

答案2

test 命令在当前文件夹中查找提到的文件,如果要从其他位置检查文件,请提供完整路径,不要使用 -z 选项或使用 -s 选项。您可以执行以下操作:

测试 /usr/bin/logname && echo $LOGNAME || echo Logname 未定义

或者

测试 -s /usr/bin/logname && echo $LOGNAME || echo Logname 未定义

相关内容