有没有一种简洁的方法来替换函数的 return 值?

Is there a concise way to substitute return value of a function?

我正在为我继承的 dash shell 脚本整理一些单元测试,考虑到我们想要的 大量 测试补充一下,我想让它们尽可能简洁。

为此,我添加了一个 check 辅助函数来处理测试的通过或失败。它基本上从上一个命令接收 return 代码 $? 并基于此通过或失败测试。这让我可以简单地实现一个单行测试(其中有很多)作为:

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]')"

但我想知道是否有办法用命令的 return 代码 进行相同的替换。

这意味着我的测试线可以删除烦人的重复 $?,从:

isInvalidIpV4 ${td} ; check pass $? "${td} should be invalid"

类似于:

check pass $[isInvalidIpV4 ${td}] "${td} should be invalid"

其中 $[] 是神秘的 "use return code" 替换运算符。

dash 是否有此功能,或者是否有比我目前所做的更简洁的方法?

请记住,其他 shell 在这里不是一个选项,这是一个嵌入式系统,dash 是唯一提供的 shell。

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