加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 使用unset而不是设置一个变量为空

发布时间:2020-12-15 16:41:22 所属栏目:安全 来源:网络整理
导读:我目前正在写一个bash测试框架,在测试函数中,可以使用标准bash测试([[)]和预定义的匹配器。匹配器是包装器,除了返回一个返回代码,设置一些有意义的消息,说什么是期望的。 例: string_equals() { if [[ ! $1 = $2 ]]; then error_message="Expected '$1
我目前正在写一个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 '%sn' "$error_message"

    unset -v error_message
fi

现在我的问题是,如果更好的是取消设置变量,或者只是设置为“”,喜欢

error_message=''

哪一个更好?它真的有区别吗?或者,我应该有一个额外的标志,表明该消息设置?

在环境变量方面,空字符串和未设置之间没有区别:
var=

var=""

产生同样的东西(Bash man页面确认)。

使用unset虽然实际上删除该变量。大多数情况下,你看不到区别,除非你使用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 not zero length

要么

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

我应该将该设置添加到一个空字符串,并使用unset对数组有非常不同的影响(我猜这不是这种情况)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读