繁体   English   中英

Bash:调用 function 并检查返回值

[英]Bash : call a function and check return value

我有一个简单的脚本可以执行以下操作:

#!/bin/bash

main(){
        test
}

test(){
        local value=$(test2 "hi")
        if [ "$value" == "test hi" ];
        then
                echo "function executed"
        fi
}

test2(){
        echo "test2 executed"
        echo "test $1"
}

main

基本上,我正在尝试检查function返回的值并相应地控制执行。 现在,当我执行此操作时,什么都不会打印(甚至test2函数中的echo语句也不打印)。 但是,当我在test function (声明后)中添加echo $value时,所有内容都会打印出来。

有什么方法可以处理test2返回的值而不显式回显返回值。

错误消息、调试 output、诊断、状态更新和进度信息应写入stderr

test2(){
        echo "test2 executed" >&2
        echo "test $1"
}

stdout应专门用于 function 的基本业务逻辑 output。 这样,您可以捕获 pipe 值,而无需将其与调试消息混合:

$ var=$(test2 "hi")
test2 executed
$ echo "The output from the function was <$var>"
The output from the function was <test hi>

在 function 中设置退出代码,并像任何其他条件一样检查它。

$: tst() { [[ foo == "$1" ]]; }
$: someVar=foo
$: if tst "$someVar"; then echo "arg was foo"; else echo "arg was NOT foo"; fi
arg was foo
$: someVar=bar
$: if tst "$someVar"; then echo "arg was foo"; else echo "arg was NOT foo"; fi
arg was NOT foo

默认情况下,任何 function 的退出代码都是最后执行命令的返回代码,除非您明确使用exitreturn (在 function 中,它们是同义词。)

如果需要,您可以创建更复杂的测试 -

tst() {
  case "$1" in
  foo) return 0  ;;
  bar) return 1  ;;
    *) return -1 ;;
  esac
}

tst "$someVar"
case "$?" in
0) echo "was foo" ;;
1) echo "was bar" ;;
*) echo "was unrecognized" ;;
esac

试试看。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM