Bash:比较两个函数的退出代码

时间:2016-05-23 22:08:43

标签: bash

有没有一种优雅的方法来比较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语句中使用该比较吗?

1 个答案:

答案 0 :(得分:1)

比较b1b2的退出代码:

b1; code1=$?
b2; code2=$?
[ "$code1" -eq "$code2" ] && echo "exit codes are equal"

在shell中,像b1 == b2这样的陈述不能单独存在。它们需要成为test命令的一部分。 test命令通常写为[...]。 此外,在shell中,=(或者,在支持的情况下,==)用于字符串比较。 -eq用于数字比较。