( test -n $st ) != ( test -z $st ) 对吧?

( test -n $st ) != ( test -z $st ) 对吧?

当我读到时,

test -n $string$string==> 如果是则退出状态为 0不为空, 1 否则

test -z $string==> 退出状态为 0 如果$string 一片空白, 1 否则

但在这个特定的例子中,(我试图创建一个空字符串)似乎我错过了一些东西。

#!/bin/sh
str=""
test -n $str
echo $?
test -z $str
echo $?

其输出是:

0
0

在此输入图像描述

任何人都可以解释这种奇怪的行为吗?

答案1

放在$str双引号里面!

-n 测试要求将字符串放在测试括号内。使用带 ! 的不带引号的字符串-z,或者甚至只是测试括号内的不带引号的字符串(参见示例 7-6)通常都可以工作,但是,这是一种不安全的做法。始终引用经过测试的字符串。其他比较运算符

相关内容