我正在为dash
我继承的 shell 脚本整理一些单元测试,并且考虑到我们要添加的大量测试,我想让它们尽可能简洁。
为此,我添加了一个check
辅助函数来处理测试的通过或失败。它基本上接收$?
来自上一个命令的返回码,并基于此通过或失败测试。这使我可以简单地实现一个单行测试(其中有很多):
for td in 1.1.1.999 {{lots of other invalid IPs}} ; do
isInvalidIpV4 ${td} ; check is-true $? "Checking ${td} is invalid"
done
for seg in 0 1 9 10 99 100 254 255 ; do
td="${seg}.${seg}.${seg}.${seg}"
isInvalidIpV4 ${td} ; check is-false $? "Checking ${td} is valid"
done
现在这是相当不错的,因为它将每个测试都简化为一行,但是,在我对完美的强迫症追求中,我想知道是否还有更多的减少空间。
我知道,像 一样bash
,可以运行命令并在另一个命令中使用其输出,如下所示:
echo "Lowercase name is $(echo PaxDiablo | tr '[A-Z]' '[a-z]')"
但我想知道是否有办法用命令的返回码进行同样的替换。
这意味着我的测试线将能够$?
删除令人讨厌的重复,从:
isInvalidIpV4 ${td} ; check pass $? "${td} should be invalid"
类似于:
check pass $[isInvalidIpV4 ${td}] "${td} should be invalid"
$[]
神话中的“使用返回码”替换运算符在哪里。
dash
有这个设施还是有比我目前所做的更简洁的方法?
请记住,这里不能选择其他 shell,这是一个嵌入式系统,它dash
是唯一提供的 shell。