Bash手册说:
如果一个参数已被赋值,则该参数被设置。空字符串是有效值。
...
如果未给出值,则为变量分配空字符串。
空字符串是否与""
?
它们的长度都为零吗?是否可以通过条件表达式-z
或-n
哪个测试字符串的长度是零还是非零来测试两者?
Sté*_*las 16
是的,该上下文中的空字符串是长度为 0 的字符串,根本不包含字节。在bash
:
var=
var=''
var=""
var=$''
var=$""
var=$(true) # or any command that outputs nothing or only newline
# characters
var=`true`
var=${null_or_unset_var}
var=''""$''$""$(true)"`true`"
Run Code Online (Sandbox Code Playgroud)
但也在 中bash
,作为bash
(与 相反zsh
)在其变量中不支持 NUL 字节的副作用(因为它在内部使用以 NUL 分隔的 C 字符串):
var=$'\0'
var=$'\u0000'
var=$'\c@'
var=$'\x00'
var=$'\0\0\0\0\0'
Run Code Online (Sandbox Code Playgroud)
在所有这些情况下,$var
将被设置但不包含任何内容(空字符串)。echo "${#var}"
将输出0
,[ -z "$var" ]
将返回 true 并且不printf %s "$var"
输出任何内容。
之后unset var
(但要注意的错误/不良特性的bash
,mksh
并且yash
在那里unset
可以揭示一个版本的$var
外部范围,而不是它解封,如果你正在做的是从从已声明的变量另一个函数调用的函数地方),$var
没有价值,是否为空。
然而,$var
除非nounset
选项打开,否则仍然扩展为空(到空字符串)。未设置变量和分配了空值的变量之间还有其他区别:
${var?}
$var
未设置时触发错误${var+x}
扩展为x
if$var
有任何值(甚至为空)${var-x}
扩展为x
if$var
未设置[[ -v var ]]
如果$var
未设置,则返回 falseexport
,则var=
在每个命令的环境中传递(如果已设置),否则根本不传递。Ale*_*hev 15
是的。使用此答案中的测试:
$ [ -n "${a+1}" ] && echo "defined" || echo "not defined"
not defined
$ a=""
$ [ -n "${a+1}" ] && echo "defined" || echo "not defined"
defined
$ b=
$ [ -n "${b+1}" ] && echo "defined" || echo "not defined"
defined
Run Code Online (Sandbox Code Playgroud)
因此,将变量设置""
为与将其设置为空值相同。因此,空值和""
是一样的。
归档时间: |
|
查看次数: |
52422 次 |
最近记录: |