如何使用带有非零标志 -n 的测试

How to use test with the nonzero flag -n

我正在尝试使用带括号 [].

的语法检查 test

test 的联机帮助页说 -n 可用于检查字符串的长度是否不为零:

 -n STRING
              the length of STRING is nonzero

相反,-z可以用来检查字符串的长度是否为零:

-z STRING
              the length of STRING is zero

为了理解 test 的工作原理,我创建了一个示例,其中包含一个长度为零的空变量 foo 和一个长度为一的第二个变量 bar

$ export foo
$ export bar=1
$ [ -n $bar ] ; echo $?
0
$ [ -n $foo ] ; echo $?
0
$ [ -z $bar ] ; echo $?
1
$ [ -z $foo ] ; echo $?
0

-n 的前两个测试结果均显示为零。我建议第一个测试为零,第二个为一个。第二个测试显示了建议的结果。

尝试以下操作:

[ -n "$foo" ] ; echo $?

由于 $foo 是一个空字符串,

[ -n $foo ] # without quotes

变成:

[ -n ]

手动测试(1) 说:

STRING equivalent to -n STRING

所以 [-n] 不像 [-n "" ],而是像 [ "-n" ]