我目前正在写一个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=''
在环境变量方面,空字符串和未设置之间没有区别:
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
原文地址:https://www.jb51.cc/bash/391995.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。