我试图从另一个bash函数中调用一个bash函数,但它没有按预期工作:
#/bin/bash
function func1(){
echo "func1 : arg = ${1}"
return 1
}
function func2(){
echo "func2 : arg = ${1}"
local var=func1 "${1}"
echo "func2 : value = $var"
}
func2 "xyz"
,当前输出为:
Current output :
func2 : arg = xyz
func2 : value = func1
问题:我如何修改上面的程序以获得以下输出? :
Desired output :
func2 : arg = xyz
func1 : arg = xyz
func2 : value = 1
答案 0 :(得分:4)
Bash中的函数与许多其他语言中的函数的工作方式不同,它们只能返回0到255之间的整数。在函数调用后使用$?
抓取。如果你想获得一些其他值,例如一个字符串,请在子shell中调用它:
local var=$(func1 "${1}")
将stdout(来自echo
语句)从函数转换为$var
。
顺便说一下,函数语法是:
function func1 { ... }
或
func1() { ... }
答案 1 :(得分:2)
将func2
定义更改为以下内容:
function func2 () {
echo "func2 : arg = ${1}"
func1 "${1}"
local var=$?
echo "func2 : value = $var"
}