我发现了我无法解释的奇怪行为。以下代码可以正常工作:
function prepare-archive {
blah-blah-blah...
_SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
exit $?
blah-blah-blah...
}
意味着我得到了我期望的价值:
bash -x ./this-script.sh:
++ exit 1
+ _SPEC_FILE='/home/likern/Print/Oleg/print-service/packaging/print-service.spec
/home/likern/Print/Oleg/print-service/packaging/print-service2.spec'
+ exit 1
一旦我将local
定义添加到变量:
local _SPEC_FILE=$(check-spec-file "$_GIT_DIR/packaging/")
我得到以下信息:
bash -x ./this-script.sh:
++ exit 1
+ local '_SPEC_FILE=/home/likern/Print/Oleg/print-service/packaging/print-service.spec
/home/likern/Print/Oleg/print-service/packaging/print-service2.spec'
+ exit 0
$:~/MyScripts$ echo $?
0
问:为什么?发生了什么?我可以将 subshell 的输出捕获到local
变量并可靠地检查 subshell 的返回值吗?
PS :prepare-archive
在主 shell 脚本中调用。第一个exit
是exit
fromcheck-spec-file
函数,第二个是 fromprepare-archive
函数——这个函数本身是从主 shell 脚本执行的。check-spec-file
我从by返回值exit 1
,然后将此值传递给exit $?
. 因此,我希望它们应该是相同的。