Bash If语句为null

Bash If语句为null,bash,if-statement,Bash,If Statement,寻找查看bash变量并确定其是否为null的正确语法,如果为空,则执行。。。否则继续 可能类似于如果[$lastUpdated=null?;那么…否则…只需测试变量是否为空: if [ -z "$lastUpdated" ]; then # not set fi 在@chepner的注释上展开,下面是如何测试unset(而不是设置为可能的空值)变量: if [ -z "${lastUpdated+set}" ]; then 如果${variable+word}未设置,则$$varia

寻找查看bash变量并确定其是否为null的正确语法,如果为空,则执行。。。否则继续


可能类似于
如果[$lastUpdated=null?;那么…否则…

只需测试变量是否为空:

if [ -z "$lastUpdated" ]; then
    # not set
fi

在@chepner的注释上展开,下面是如何测试unset(而不是设置为可能的空值)变量:

if [ -z "${lastUpdated+set}" ]; then
如果
${variable+word}
未设置,则
$$variable
语法会给出一个空字符串,如果设置了,则会给出字符串“word”:

$ fullvar=somestring
$ emptyvar=
$ echo "<${fullvar+set}>"
<set>
$ echo "<${emptyvar+set}>"
<set>
$ echo "<${unsetvar+set}>"
<>
$fullvar=somestring
$emptyvar=
$echo“”
$echo“”
$echo“”

总而言之:bash中没有真正的空值。切普纳的评论重点如下:

bash文档使用null作为空字符串的同义词

因此,检查null意味着检查空字符串:

if [ "${lastUpdated}" = "" ]; then 
    # $lastUpdated is an empty string
fi
如果您真正想做的是检查未设置或空的(即“”,即“null”)变量,请使用特洛伊木马的方法:

if [ -z "$lastUpdated" ]; then
    # $lastUpdated could be "" or not set at all
fi
如果您想检查变量是否未设置,但可以使用空字符串,Gordon Davidson的答案是:

if [ -z ${lastUpdated+set} ]; then
    # $lastUpdated is not set
fi

(就是这里发生的事情)

bash
文档使用
null
作为空字符串的同义词。空值变量(分配给空字符串)之间存在差异和一个未设置的变量;这个答案不能检测到这种区别。@chepner存在吗?请在此基础上展开。在任何赋值之前,变量是未设置的。
FOO=
(没有给出值)相当于
FOO=”“
,它将
FOO
的值设置为空字符串。各种参数扩展(
${FOO:-default}
vs
${FOO default}
,例如)允许您进行此区分。未设置变量的引号扩展(如您使用的)会扩展为空字符串,因此
-z
无法区分这两种状态。@chepner听起来像是您应该回答问题并赢得奖品。@trojanfoe仅供参考。虽然存在此区别,但人们并不关心distinction:)@panepeter是真的,但我的经验是,仅对变量引用进行双引号引用比确定何时可以安全地将其关闭更容易、更安全。在这种情况下,这需要详细的解释(包括了解
[-z]
的作用和原因)人类使用双引号要容易得多。换句话说:如果有人认为
[-z${lastUpdated+set}]
是测试集合变量的好方法,他们可能会推断
[-n${lastUpdated+set}]
是测试未设置变量的好方法,但它会完全失败。