在bash中 - 存储方法返回值

时间:2014-09-28 16:11:07

标签: bash methods

我正在尝试存储从这样的方法返回的值:var=$(methodName),但程序永远不会进入方法...这很奇怪,因为我之前几行做了同样的事情(alreadyExists-variable)在代码示例中),它工作正常。我不得不这样做:var='methodName'让程序进入方法。

它有效,为什么要关心?我可能犯了一个错误,我需要知道它是什么并从中学习。如果您需要更多信息来回答这个问题,请与我们联系。谢谢!

overwriteOrNot()
{
    echo DEBUG
    # This debug string does not print if method is called from "local overwrite=$(overwriteOrNot)"
    # but prints if method is called from "local overwrite='overwriteOrNot'"
    ...
}

local alreadyExists=$(studentNumberExists studentNumber)
if $alreadyExists ; then
    # local overwrite=$(overwriteOrNot)
    local overwrite='overwriteOrNot'
...

2 个答案:

答案 0 :(得分:0)

以下内容:

local overwrite='overwriteOrNot'

指定一个字符串;它没有调用函数。代替:

local overwrite=$(overwriteOrNot)

您可以使用 $?变量检查调用overwriteOrNot的返回值,或者直接在条件语句中检查其数字返回值,如:

if overwriteOrNot; then
    :
fi

如果您指定覆盖,您还可以使用任何有效的测试条件(例如相等,正则表达式匹配或空白)检查其值。例如:

if [[ "$overwrite" == "foo" ]]; then
    :
fi

答案 1 :(得分:0)

如果你正在使用return,那么你需要直接分支其结果:

if overwriteOrNot; then
  : "the function returned 0"
else
  : "the function returned something other than 0"
fi

...或在运行函数后立即存储$?的值:

overwriteOrNot
local overwrite=$?

请注意,return只能返回单字节整数。如果您需要传递不适合该类型的内容,则需要在stdout或全局变量中传递。