2

「bash」の新しい使用方法を使用します。

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

これらをダッシュ​​に変換する方法は?(実際はbusyboxのシェルです)

次の行を使用して置き換えます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"

解決策 2、手動分割

これはソリューションに似ていますが、ファイルを使用したり、awk などの外部プログラムを呼び出したりしないという利点があります。

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