如何通过dash shell中的函数返回值分配多个变量

时间:2013-10-01 07:01:22

标签: shell dash-shell

我使用'bash'的全新用法。

func(){
  echo Dan 38
}
read name age < <(func)
echo "name=$name age=$age"

如何将这些转换成破折号? (实际上它是busybox的shell)

我使用以下行代替read name age < <(func)

func > /tmp/$$
name=`cat /tmp/$$ | awk '{print $1}'`
age=`cat /tmp/$$ | awk '{print $2}'`
rm /tmp/$$

但是,我想知道是否有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

解决方案1,C风格

修改函数以接受要写入结果的变量的名称(您可以将它们视为指针)。

func () { eval "$1=Dan $2=38"; }
func name age
echo "name=$name age=$age"

解决方案2,手动拆分

这与您的解决方案类似,但其优点是不使用文件或调用awk等外部程序。

func(){ echo Dan 38 }
both=$(func)
name=${both%% *}
age=${both#* }
echo "name=$name age=$age"