说我有以下两个Bash脚本:
版本#1:
#!/bin/bash
function bar
{
if true; then
echo "error" >&2
exit 1
fi
echo "bar"
}
function foo
{
local val=`bar`
echo $?
echo "val: $val"
}
foo
版本#2秒稍有不同foo
:
function foo
{
val=`bar` #note no 'local'
echo $?
echo "val: $val"
}
版本#1给出了以下输出:
error
0
val:
虽然版本#2给了我这个:
error
1
val:
在#2中加入local
似乎隐藏了bar
的返回值。
我认为这是正确的,因为local
本身就是一个函数,并且返回0?如果是这样,有没有办法绕过这个并使val
成为局部变量,但仍然会测试bar
的返回值?
答案 0 :(得分:1)
是的,您正在阅读成功的local
的返回值。修复是将变量声明与其定义分开,如下所示:
#!/bin/bash
function bar
{
if true; then
echo "error" >&2
exit 1
fi
echo "bar"
}
function foo
{
local val
val=$(bar)
echo $?
echo "val: $val"
}
foo
$ ./localtest
error
1
val: