可以在不使用echo或全局变量的情况下从Bash函数返回字符串吗?

时间:2013-01-23 15:14:52

标签: bash function return echo interactive

我在工作中回到了很多Bash脚本,我生气了。

有没有办法从函数返回本地值字符串而不使其全局或使用echo?我希望该函数能够通过屏幕与用户交互,但也将返回值传递给变量而不需要export return_value="return string"之类的东西。 printf命令似乎完全像echo一样响应。

例如:

function myfunc() {
    [somecommand] "This appears only on the screen"
    echo "Return string"
}

# return_value=$(myfunc)
This appears only on the screen

# echo $return_value
Return string

3 个答案:

答案 0 :(得分:6)

没有。 Bash不会从函数返回除数字退出状态之外的任何内容。您的选择是:

  1. 在函数内设置非局部变量。
  2. 使用echoprintf或类似内容提供输出。然后可以使用命令替换在函数外部分配该输出。

答案 1 :(得分:2)

要使其仅显示在屏幕中,您可以将echo重定向到stderr:

echo"这只出现在屏幕上" >和2

显然,不应该重定向stderr。

答案 2 :(得分:1)

创造性地使用eval函数,您还可以将值分配给函数体内的参数位置,以及有效地分配给参数。有时称为“输出呼叫”参数。

foo() {
    local input="$1";
    # local output=$2;  # need to use $2 in scope...

    eval "${2}=\"Hello, ${input} World!\""
}


foo "Call by Output" output;

echo $output;