bash是否有一个不会短路的布尔和/或运算符?

时间:2011-11-14 06:28:49

标签: bash

我希望能够始终执行validateA和validateB:

function validateA() {
  echo "A [ok]"
  return 0
}

function validateB() {
  echo "B [ok]"
  return 0
}

if ! validateA | ! validateB; then 
  echo "validation [fail]"
  exit 1
else
  echo "validation [ok]"
  exit 0
fi

3 个答案:

答案 0 :(得分:4)

您可以随意调用它们并捕获返回值:

function validateA() {
    echo "A [fail]"
    return 1
}

function validateB() {
    echo "B [ok]"
    return 0
}

validateA ; vA=$?
validateB ; vB=$?

if [[ $vA -ne 0 || $vB -ne 0 ]] ; then
    echo "validation [fail]"
    exit 1
else
    echo "validation [ok]"
    exit 0
fi

输出:

A [fail]
B [ok]
validation [fail]

答案 1 :(得分:2)

我有同样的问题,最后做了类似的事情:

rc=0
if ! validateA ; then rc=1; fi
if ! validateB ; then rc=1; fi
return $rc

它与其他答案的原理相同,但语法更为浓缩。

答案 2 :(得分:1)

我想到的第一个想法就是一致地调用每个函数,保存返回值并在以后进行分析。像这样:

validateA
a_retval=$?

validateB
b_retval=$?

if [ $a_retval -ne 0 -o $b_retval -ne 0 ]; then
  echo "validation [fail]"
  exit 1
else
  echo "validation [ok]"
  exit 0
fi