使用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