&2 exit 1 -6ren">
gpt4 book ai didi

bash - 代入局部变量时函数的返回值

转载 作者:行者123 更新时间:2023-11-29 09:32:15 25 4
gpt4 key购买 nike

假设我有以下两个 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

第二版的 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

输出

$ ./localtest
error
1
val:

关于bash - 代入局部变量时函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8725953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com