在另一个函数中调用一个函数

时间:2012-11-05 13:28:16

标签: linux bash shell

我试图从另一个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

2 个答案:

答案 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"
}