是否有简洁的方法来替换函数的返回值?

时间:2017-01-06 03:26:29

标签: dash-shell

我正在为我已经继承的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

现在这是相当不错的,因为它将每个测试都归结为一行但是,在我的OCD追求完美的过程中,我想知道是否还有更多的缩减范围。

我知道,就像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。

1 个答案:

答案 0 :(得分:0)

if ! isInvalidIpV4 $td
then
  echo $td should be invalid
fi