使用unset与设置一个variables为空

我目前正在编写一个bashtesting框架,在一个testing函数中,标准bashtesting( [[ )以及预定义的匹配器都可以使用。 匹配器是'[''的包装,并且除了返回一个返回码之外,还设置了一些有意义的信息来说明预期的结果。

例:

 string_equals() { if [[ ! $1 = $2 ]]; then error_message="Expected '$1' to be '$2'." return 1 fi } 

所以,当一个匹配器被使用,并且失败时,只有一个error_message被设置。

现在,稍后,我testingtesting是否成功。 如果成功了,如果红色失败,我打印绿色的期望。

此外,可能会有一个error_message集,所以我testing一个消息是否存在,打印出来,然后取消设置(因为下面的testing可能不会设置error_message ):

 if [[ $error_message ]]; then printf '%s\n' "$error_message" unset -v error_message fi 

现在我的问题是,如果最好取消设置variables,或者将其设置为“',就像

 error_message='' 

哪一个更好? 它实际上有所作为吗? 或者,也许我应该有一个额外的标志,指示消息已设置?

大多数情况下,你没有看到有什么不同,除非你使用set -u

 /home/user1> var="" /home/user1> echo $var /home/user1> set -u /home/user1> echo $var /home/user1> unset var /home/user1> echo $var -bash: var: unbound variable 

所以真的,这取决于你如何去testingvariables。

我会补充说我的首选testing方法是:

 [[ -n $var ]] # True if not zero length 

要么

 [[ -z $var ]] # True if zero length 

如前所述,使用unset与数组也是不同的

 $ foo=(4 5 6) $ foo[2]= $ echo ${#foo[*]} 3 $ unset foo[2] $ echo ${#foo[*]} 2