[英]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 的退出代码都是最后执行命令的返回代码,除非您明确使用exit
或return
。 (在 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.