Bash 脚本在函数中本地回显

Bash 脚本在函数中本地回显

在 bash 脚本中,我尝试尽可能将变量保留在函数本地,然后从函数中传递我需要的内容,如下所示

#!/bin/bash

function FUNCTION() {
    local LOCAL="value"
    echo "$LOCAL"   # return this variable
}

GLOBAL=$(FUNCTION)

echo "$GLOBAL"

但是是否可以在包含函数自己的回显的同时执行此操作,以便如果函数有自己的消息要输出,我不必将它们捕获在变量中

#!/bin/bash

function FUNCTION() {
    local LOCAL="value"
    echo "$LOCAL"                      # return this variable
    echo "This function is done now"   # do not return this variable
}

GLOBAL=$(FUNCTION)

echo "$GLOBAL"                         # should only echo 'value'

答案1

如果捕获正确的输出流,则可以捕获该函数打印的任何内容。因此,打印某些内容并保存其他输出的最简单方法是将多余的输出重定向到标准错误:

function FUNCTION() {
    local LOCAL="value"
    echo "$LOCAL"
    echo "This function is done now" >&2
}

另一种可能性是记录到文件而不是直接打印日志消息,例如使用如下内容:

log() {
    printf '%s\n' "$@" > my.log
}

也就是说,Bash 函数无法返回变量。唯一实际的“返回”值是退出代码。为此原因 (和许多其他人),如果您想要可靠的日志记录、返回值、异常处理等,您将需要使用不同的语言,例如 Python、Ruby 或 Java。

答案2

您可以显示有关标准错误的信息消息:

function FUNCTION() {
    local LOCAL="value"
    echo "$LOCAL"                      # return this variable
    echo "This function is done now" > /dev/stderr  # goes to the screen
}

其他一些建议在这篇 Linux 期刊文章:使用全局变量(您提到您不喜欢),或传递变量的名称以返回结果。

相关内容