我了解您可以使用echo在控制台上打印信息。 但是我尝试将return与整数一起使用,但对我来说效果不佳。
截至
function echo_test() {
echo 1;
}
function output_echo() {
local result="$(echo_test)";
if [[ ${result} == 1 ]]; then
echo great;
else
echo nope;
fi
}
输出“很好”,但是:
function return_test() {
return 1;
}
function output_return() {
local result="$(return_test)";
if [[ ${result} == 1 ]]; then
echo great;
else
echo nope;
fi
}
不起作用...并输出“ nope”。
答案 0 :(得分:3)
您要混淆两件事:输出和退出状态。
echo
生成输出。像$(...)
这样的命令替换将捕获该输出,但是如果您在没有命令的情况下运行命令,则该输出将到达终端。
return
设置退出状态。这是用来确定运行if your_function; then ...
时采用哪个分支或填充$?
的对象。
要查看您的return_test
函数实际上在做什么,您可以编写:
return_test() {
return 1;
}
return_test; echo "Exit status is $?"
此外,请注意,两种方法都可以实现:
myfunc() {
echo "This is output"
return 3
}
myfunc_out=$(myfunc); myfunc_rc=$?
echo "myfunc_out is: $myfunc_out"
echo "myfunc_rc is: $myfunc_rc"
...发出:
myfunc_out is: This is output
myfunc_rc is: 3
一个有用的习惯用法是将一个赋值放在if
条件内,以在捕获输出时分支到退出状态:
if myfunc_out=$(myfunc); then
echo "myfunc succeeded (returned 0), with output: [$myfunc_out]"
else rc=$?
echo "myfunc failed (nonzero return of $rc), with output: [$myfunc_out]"
fi
...在这种情况下,将返回:
myfunc failed (nonzero return of 3), with output: [This is output]
顺便说一句,您可能会注意到,当以上代码捕获$?
时,它会尽可能接近捕获其退出状态的命令,即使这意味着违反常规约定垂直空白。这是有意的,目的是减少在设置点和使用点之间无意间修改$?
的可能性,从而增加添加日志或其他代码更改的可能性。