Shell如何在if语句

时间:2017-11-18 15:09:47

标签: bash shell

我有两个功能。

函数返回0-255,我想在if语句中捕获return number

我想比较没有declare var$?

的价值观

我该怎么办?

我试过了:

#!/bin/bash

add(){
    echo "add $1 $2 $3"
    return $(($1+$2+$3))
}

sub(){
    echo "sub $1 $2 $3"
    return $(($1-$2-$3))
}

add 1 2 3
if [[ $? != "6" ]]; then
    echo "succ"
else
    echo "fail"
fi

# The code I expect is like this
if [[ $(add 1 2 3) != $(sub 10 2 2) ]]; then
    echo "succ"
else
    echo "fail"
fi

代码打印

add 1 2 3
fail
succ

我知道子功能会溢出,但这并不重要。

回答:仅使用$?来抓取return

1 个答案:

答案 0 :(得分:2)

$(...)捕获输出,而不是返回值。最直接的实现是将命令列表放在条件中:

if fun1 1 2 3; r1=$?; fun2; r2=$?; [[ $r1 != $r2 ]]; then
    echo "success"
else
    echo "fail"
fi

然而,比较状态代码有点奇怪。通常,如果成功,则表示两个函数都具有0退出状态,您只需在&&列表中运行这两个函数(假设您不需要运行fun2 {{1}先失败了。

fun1