如何在不分叉的情况下从 bash 函数返回字符串?

如何在不分叉的情况下从 bash 函数返回字符串?

我有我的职能

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函数内对它的任何引用都将引用其名称作为函数的第一个参数给出的变量。

这需要bash4.3 或更高版本。

答案2

我只是使用全局从简单函数返回值并在调用后立即获取它。例如“出”

喜欢

    foo() {
      local a='Hello World'
      a="${a% *}" # some work
      OUT="$a"
    }

   foo; myVar="$OUT"

相关内容