【发布时间】:2021-03-03 00:12:18
【问题描述】:
在 bash 函数中,我试图捕获命令的输出及其退出代码。一般来说,我的表格是
some_function() {
local rv=$(some_other_function)
local code=$?
echo "$rv"
return $code
}
但我注意到每当我使用“本地”时,然后 $?总是 0。就像它捕获分配的结果,而不是被调用的函数。 如果我不使用“本地”,那么它会按预期工作:
$ foo() { local rv=$(false); echo "code is $?"; }
$ foo
code is 0
$ foo() { rv=$(false); echo "code is $?"; }
$ foo
code is 1
谁能给我解释一下?显然这里有一些基本的东西我就是不明白。
【问题讨论】:
-
local rv=$(some_other_function)还有一个问题——在某些 shell(不包括 bash)中,some_other_function的输出在传递给local之前会被分词;第一个单词将被分配给rv,其余的将被视为单独的标识符以标记为局部变量(那些不是有效标识符的除外)。总是双引号命令替换是最安全的,例如local rv="$(some_other_function)",就像你应该变量引用一样。