基于这,在我读过的许多其他内容中,我的理解是,这a=''
使得a
长度为零和零。但是,那么如何创建一个零长度、非空字符串呢?或者说,根本就没有这样的事情吗?在某种程度上,这是依赖于 shell 的,我正在 bash 中工作。
答案1
“空字符串”方法“零长度(空)字符串”。参见例如“空字符串”的 POSIX 定义。这意味着不存在非空零长度字符串。
然而,有是诸如此类的事情未设置多变的。
var=''
unset uvar
现在,运行上述代码之间var
和运行后之间存在差异。uvar
例如,${var-hello}
将扩展为空字符串since var
is set,而${uvar-hello}
将扩展为hello
since uvar
is unset。同样,${var+hello}
将扩展为hello
sincevar
已设置,并将${uvar+hello}
扩展为空字符串sinceuvar
is unset”(请参阅标准参数扩展)
在 中bash
,您还可以使用-v
test 来测试变量是否已设置:
if [ -v variable ]; then
echo variable is set
fi
同样,“设置但为空”的变量与“未设置”的变量不同。字符串(变量的内容)不能为空,同时也不能具有非零长度。
在其他语言中,字符数组可能包含 nul 字节 ( \0
),这意味着您可能有一个以 nul 字节开始的数组,然后包含一些文本(以另一个 nul 字节终止)。当这被解释为细绳,该字符串的长度为零,但数组的内容不会为空。
大多数 shell(除了zsh
)不允许变量中出现 nul 字节。