Bash 替换为局部变量时函数的返回值
假设我有以下两个Bash脚本: 第1版: 版本为#2秒时,具有稍微不同的Bash 替换为局部变量时函数的返回值,bash,Bash,假设我有以下两个Bash脚本: 第1版: 版本为#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作为
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
的返回值?是的,您正在读取成功的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
输出
可能重复的@dogbane搞笑,我不记得回答过这个问题;)当然,愚蠢的我!最简单的答案就是最好的,谢谢。
#!/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: