2

我使用全新的“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/$$

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

4

1 回答 1

0

解决方案 1,C 风格

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

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

方案二、手动拆分

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

func(){ echo Dan 38 }
both=$(func)
name=${both%% *}
age=${both#* }
echo "name=$name age=$age"
于 2013-10-01T07:34:21.377 回答