2013-04-21 34 views
3

首先我的源代码测试的Bash函数返回的方法:bash函数

function oidev.fnc.bash.example.fncreturnstringvalue 
{ 
    echo "ABC" 
    return 1 
} 

和调用函数:

function oidev.fnc.bash.example.fncreturnstringvaluecaller 
{ 
    local FNCVALUE 
    local FNCSTRING 
    FNCSTRING=$(oidev.fnc.bash.example.fncreturnstringvalue && FNCVALUE="$?" || FNCVALUE="$?") 
    # String OK but Value empty 
    echo "VALUE : $FNCVALUE" 
    echo "STRING: $FNCSTRING" 
    unset FNCVALUE 
    unset FNCSTRING 
    oidev.fnc.bash.example.fncreturnstringvalue && FNCVALUE="$?" || FNCVALUE="$?" 
    # Value OK and String on STDOUT 
    echo "VALUE : $FNCVALUE" 
    echo "STRING: $FNCSTRING" 
} 

在bash输出:
VALUE :
STRING:ABC
ABC
VALUE:1
STRING(当然空的,但是从功能上回荡) `

现在我简单的问题:
是否有可能通过一个单一的线建设得到返回的字符串,返回值到两个不同的变量?

我不想使用全局变量,nore使用if $?之后的子通话!
非常感谢您的帮助,并为我的德语英语感到抱歉!

回答

1

试试这个,也许可以帮助:

func() { 
    echo 'abc' 
    return 111 
} 

read var1 var2 <<<$(func; echo $?) 
echo "var1 $var1" 
echo "var2 $var2" 

会打印:

var1 abc 
var2 111 

解决方法的 “空间问题” - 现在,有没有更好的主意,因为使用的辅助函数这样

func() { 
    echo 'abc def' 
    return 111 
} 

runner() { 
    ret=$(func) 
    echo $? $ret 
} 

read -r var2 var1 <<<$(runner func) 
echo "var1 $var1" 
echo "var2 $var2" 

或使用辅助变量并切换变量顺序

func() { 
    echo 'abc def' 
    return 111 
} 
read -r var2 var1 <<<$(res=$(func); echo $? $res) 
echo "var1 $var1" 
echo "var2 $var2" 

都返回

var1 abc def 
var2 111 
+0

感谢这个完美的答案,在<<<建设......,谷歌知道! – 2013-04-21 19:29:04

+0

如果'func()'返回的字符串包含空格,则这将不起作用。 – jordanm 2013-04-21 19:55:47

+0

是的,但它可以在函数内部用echo“\'a b c \'”引用到一个变量来从调用者读取 – 2013-04-21 20:26:56