2012-11-05 52 views
2

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

变化func2定义如下:在猛砸

function func2() { 
    echo "func2 : arg = ${1}" 
    func1 "${1}" 
    local var=$? 
    echo "func2 : value = $var" 
} 
4

功能不以同样的方式在许多其他语言工作的功能,他们只能返回0和255之间的整数。这是在函数调用后使用$?抓取的。如果你想获得一些其他的值,例如一个字符串,把它在一个子shell:

local var=$(func1 "${1}") 

将得到该函数的标准输出(从echo报表)为$var

顺便说一句,函数的语法是:

function func1 { ... } 

func1() { ... } 
+0

+1有更全面的答案。 (删除我的) –

+0

是的,这是一个非常好的解释。还要感谢函数语法的指针。 – artella

+0

p.s.如果你想让你的函数返回大于255的东西,那么在bash中怎么做呢? – artella