我正在使用一个bash脚本,我想执行一个函数打印返回值:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
当我执行fun2时,它不会打印“34”。为什么会这样呢?
我正在使用一个bash脚本,我想执行一个函数打印返回值:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
当我执行fun2时,它不会打印“34”。为什么会这样呢?
当前回答
我能想到的最简单的方法是在方法体中像这样使用echo
get_greeting() {
echo "Hello there, $1!"
}
STRING_VAR=$(get_greeting "General Kenobi")
echo $STRING_VAR
# Outputs: Hello there, General Kenobi!
其他回答
Git Bash在Windows上使用数组表示多个返回值
Bash代码:
#!/bin/bash
## A 6-element array used for returning
## values from functions:
declare -a RET_ARR
RET_ARR[0]="A"
RET_ARR[1]="B"
RET_ARR[2]="C"
RET_ARR[3]="D"
RET_ARR[4]="E"
RET_ARR[5]="F"
function FN_MULTIPLE_RETURN_VALUES(){
## Give the positional arguments/inputs
## $1 and $2 some sensible names:
local out_dex_1="$1" ## Output index
local out_dex_2="$2" ## Output index
## Echo for debugging:
echo "Running: FN_MULTIPLE_RETURN_VALUES"
## Here: Calculate output values:
local op_var_1="Hello"
local op_var_2="World"
## Set the return values:
RET_ARR[ $out_dex_1 ]=$op_var_1
RET_ARR[ $out_dex_2 ]=$op_var_2
}
echo "FN_MULTIPLE_RETURN_VALUES EXAMPLES:"
echo "-------------------------------------------"
fn="FN_MULTIPLE_RETURN_VALUES"
out_dex_a=0
out_dex_b=1
eval $fn $out_dex_a $out_dex_b ## <-- Call function
a=${RET_ARR[0]} && echo "RET_ARR[0]: $a "
b=${RET_ARR[1]} && echo "RET_ARR[1]: $b "
echo
## ---------------------------------------------- ##
c="2"
d="3"
FN_MULTIPLE_RETURN_VALUES $c $d ## <--Call function
c_res=${RET_ARR[2]} && echo "RET_ARR[2]: $c_res "
d_res=${RET_ARR[3]} && echo "RET_ARR[3]: $d_res "
echo
## ---------------------------------------------- ##
FN_MULTIPLE_RETURN_VALUES 4 5 ## <--- Call function
e=${RET_ARR[4]} && echo "RET_ARR[4]: $e "
f=${RET_ARR[5]} && echo "RET_ARR[5]: $f "
echo
##----------------------------------------------##
read -p "Press Enter To Exit:"
预期的输出:
FN_MULTIPLE_RETURN_VALUES EXAMPLES:
-------------------------------------------
Running: FN_MULTIPLE_RETURN_VALUES
RET_ARR[0]: Hello
RET_ARR[1]: World
Running: FN_MULTIPLE_RETURN_VALUES
RET_ARR[2]: Hello
RET_ARR[3]: World
Running: FN_MULTIPLE_RETURN_VALUES
RET_ARR[4]: Hello
RET_ARR[5]: World
Press Enter To Exit:
尽管Bash有一个返回语句,但你唯一可以用它指定的是函数自己的退出状态(0到255之间的值,0表示“成功”)。所以返回不是你想要的。
您可能希望将return语句转换为echo语句——这样就可以使用$()花括号捕获函数输出,这似乎正是您想要的。
这里有一个例子:
function fun1(){
echo 34
}
function fun2(){
local res=$(fun1)
echo $res
}
获取返回值的另一种方法(如果您只想返回一个0-255的整数)是$?
function fun1(){
return 34
}
function fun2(){
fun1
local res=$?
echo $res
}
另外,请注意,您可以使用返回值来使用布尔逻辑-如fun1 || fun2将只在fun1返回非0值时运行fun2。默认返回值是函数中执行的最后一条语句的退出值。
$(…)捕获其中包含的命令发送到标准输出的文本。返回不输出到标准输出。$ ?包含最后一个命令的结果代码。
fun1 (){
return 34
}
fun2 (){
fun1
local res=$?
echo $res
}
return语句设置函数的退出代码,与exit对整个脚本的作用大致相同。
最后一个命令的退出码总是在$?变量。
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $? # <-- Always echos 0 since the 'local' command passes.
res=$(fun1)
echo $? #<-- Outputs 34
}
我能想到的最简单的方法是在方法体中像这样使用echo
get_greeting() {
echo "Hello there, $1!"
}
STRING_VAR=$(get_greeting "General Kenobi")
echo $STRING_VAR
# Outputs: Hello there, General Kenobi!