有没有一种优雅的方法来比较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
但坚持这个"不是xor"实施
if ! b1 && ! b2 || ( b1 && b2 ) ; then echo 'then'; else echo 'else'; fi
更一般地说,可以算术地比较两个函数的退出代码并在if语句中使用该比较吗?
答案 0 :(得分:1)
比较b1
和b2
的退出代码:
b1; code1=$?
b2; code2=$?
[ "$code1" -eq "$code2" ] && echo "exit codes are equal"
在shell中,像b1 == b2
这样的陈述不能单独存在。它们需要成为test
命令的一部分。 test
命令通常写为[...]
。
此外,在shell中,=
(或者,在支持的情况下,==
)用于字符串比较。 -eq
用于数字比较。