evalを使ったshell functionの戻り値の設定方法

これは便利な使い方と思ったので、メモ

shell 内の function で、文字列は返せません。テクニックとして、echoを使ったり、shell変数とかを使って橋渡したりするのですが、いつもスマートじゃないと思っていました。

そんなとき、evalを使用して文字列を返す方法がありましたので、紹介です。
まずは、コードから。

#!/bin/sh
function func()
{
  eval $1='FUNCTIONの戻りとして使用したい'
}
func test
echo $test

これを実行すると、

$ sh test.sh
functionの戻りとして使用したい

となります。

evalで、$1が引数の1として展開され、
test='FUNCTIONの戻りとして使用したい'
となり、shell変数testに値を設定していることになる感じです。これは、コードが見やすくなるので、いいアイデアですよね。

参考: