分岐せずにbash関数から文字列を返す方法は?

分岐せずにbash関数から文字列を返す方法は?

私は私の機能を持っています

fun() {
    local result
    ...complex calculations...
    echo "$result"
}

もちろん、次のコマンド置換で呼び出すことができます。

something="$(fun)"

しかし、それは私が望むものではありません。不必要にフォークしてfunサブシェルで実行しようとしています。

$resultフォークなしで使用したい。

簡単な解決策(でグローバル変数の設定)以外にfun()何ができますか?

ベストアンサー1

結果を返す変数名を関数に割り当てます。

foo () {
    declare -n result="$1"

    # stuff that sets result
    result='Hello world'
}

foo myvar1
foo myvar2

# Will print "Hello world" twice:
echo "$myvar1"
echo "$myvar2"

この変数resultは名前参照変数であり、foo関数内のすべての参照は、名前が関数の最初の引数として提供される変数を参照します。

これにはbashバージョン4.3以降が必要です。

おすすめ記事