我正在尝试存储从这样的方法返回的值: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'
...
答案 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或全局变量中传递。