3

首先我的源代码来测试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: (肯定是空的,但从函数中回显)`

现在我的简单问题
是:是否可以通过 a 将返回字符串和返回值转换为两个不同的变量单线建设?

我不想使用全局变量,也不想使用 if $? 后分呼!
非常感谢您的帮助,并为我的德语英语感到抱歉!

4

1 回答 1

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
于 2013-04-21T19:10:40.623 回答