我有我的职能
fun() {
local result
...complex calculations...
echo "$result"
}
当然我可以通过命令替换来调用它,例如
something="$(fun)"
但这不是我想要的。它进行了不必要的分叉,fun
即将在子 shell 中执行。
我想在$result
不使用 fork 的情况下使用。
除了简单的解决方案(在 中设置全局变量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"