首先测试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中的输出:
价值:
STRING:ABC
ABC
价值:1
STRING :(肯定是空的,但是从功能上回应)
`
现在我的简单问题:
是否可以通过单线结构获得返回的字符串并将值返回到两个不同的变量中?
我不想使用全局变量,不使用if $?分电话后!
非常感谢你的帮助,对不起我的德语 - 英语!
答案 0 :(得分: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