私は私の機能を持っています
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以降が必要です。
答え2
私は単純な関数から値を返し、呼び出し直後に値を取得するためにグローバルを使用します。たとえば、「アウト」
良い
foo() {
local a='Hello World'
a="${a% *}" # some work
OUT="$a"
}
foo; myVar="$OUT"