有没有一种简洁的方法来替换函数的 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
我正在为我继承的 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