从man bash
:
-n string
True if the length of string is non‐zero.
例子:
# expected
$ var=""; [ -n "$var" ]; echo $?
1
# unexpected?
$ var=""; [ -n $var ]; echo $?
0
在这里我们看到,-n
包含空字符串的不带引号的变量返回 true。为什么?
为什么$var
这里需要引用呢?
从man bash
:
-n string
True if the length of string is non‐zero.
例子:
# expected
$ var=""; [ -n "$var" ]; echo $?
1
# unexpected?
$ var=""; [ -n $var ]; echo $?
0
在这里我们看到,-n
包含空字符串的不带引号的变量返回 true。为什么?
为什么$var
这里需要引用呢?
$ 符号引入参数扩展、命令替换或算术扩展
在你的第二种情况(
$var
未引用)中,由于$var
是空的,它将扩展为空。就像您没有为测试指定任何操作数一样。在第一种情况下,(
$var
双引号)$var
仍然会扩展为除了双引号内之外的任何内容,这顺便提供了空字符串""
作为测试的操作数。更新评论中OP的以下附加问题:
我最初回答说,根据手册,测试
false 包括“给出无效参数”的情况。
illkachu 的一些评论提供了更深入的见解:
然而 :