gpt4 book ai didi

bash - 使用 unset 与将变量设置为空

转载 作者:行者123 更新时间:2023-11-29 08:38:57 28 4
gpt4 key购买 nike

我目前正在编写一个 bash 测试框架,在测试函数中,可以使用标准 bash 测试 ([[) 以及预定义的匹配器。匹配器是“[[”的包装器,除了返回返回码外,还设置了一些有意义的消息来说明预期内容。

例子:

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

return 1
fi
}

因此,当使用匹配器失败时,才会设置 error_message。

现在,在稍后的某个时间点,我测试测试是否成功。如果成功,我将期望打印为绿色,如果失败则打印为红色。

此外,可能设置了 error_message,所以我测试是否存在消息,打印它,然后取消设置(因为以下测试可能不会设置 error_message):

if [[ $error_message ]]; then
printf '%s\n' "$error_message"

unset -v error_message
fi

现在我的问题是,是取消设置变量更好,还是将其设置为 '' 更好,例如

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

实际上,这取决于您将如何测试变量。

我要补充的是,我首选的测试方法是:

[[ -n $var ]]  # True if the length of $var is non-zero

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

关于bash - 使用 unset 与将变量设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12262696/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com