5

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

有没有办法从函数返回本地值字符串而不使其成为全局或使用回显?我希望该函数能够通过屏幕与用户交互,但也可以将返回值传递给没有类似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
4

3 回答 3

9

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

  1. 在函数内部设置一个非局部变量。
  2. 使用echoprintf或类似名称来提供输出。然后可以使用命令替换将该输出分配到函数外部。
于 2013-01-23T15:40:43.817 回答
5

要使其仅出现在屏幕中,您可以重定向echo到 stderr:

echo "This appears only on the screen" >&2

显然,不应重定向 stderr。

于 2015-01-23T16:53:25.867 回答
3

创造性地使用该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;
于 2018-07-16T12:53:47.153 回答