有没有一种优雅的方法来比较 bash 中两个函数的退出代码?例如
b ()
{
local r=$(rand -M 2 -s $(( $(date +%s) + $1 )) );
echo "b$1=$r";
return $r;
} # just random boolean
b1 () { b 1; return $?; } # some boolean function
b2 () { b 2; return $?; } # another boolean function ( another seed )
我想使用这样的东西
if b1 == b2 ; then echo 'then'; else echo 'else'; fi
但坚持这种"非异或"实现
if ! b1 && ! b2 || ( b1 && b2 ) ; then echo 'then'; else echo 'else'; fi
更一般地说,是否可以在算术上比较两个函数的退出代码并在 if 语句中使用该比较?
要比较 b1
和 b2
的退出代码:
b1; code1=$?
b2; code2=$?
[ "$code1" -eq "$code2" ] && echo "exit codes are equal"
在壳牌中,像b1 == b2
这样的陈述不能独立存在。 他们需要成为test
命令的一部分。 test
命令通常写为 [...]
。此外,在 shell 中,=
(或,如果支持,==
)用于字符串比较。 -eq
用于数值比较。