从另一个 bash 函数获取输出和返回值

0 bash function callback

在 function_two 中,我需要获取 echo 的输出和 function_one 的返回值

#!/bin/bash
function_one() {
    echo "okay then"
    return 2
}
function_two() {
    local a_function="function_one"
    local string=`${a_function}`
    echo $string # echos "okay then"
    echo "$?" #echos 0 - how do we get the returned value of 2?
}
function_two
Run Code Online (Sandbox Code Playgroud)

当尝试时echo "$?"我得到0而不是2

更新

正如 Ipor Sircer 指出的,$?上面给出了上一个命令的退出代码echo $string

因此,我立即获取退出代码。正如 choroba 提到的,变量的本地化和赋值需要分开。

这是工作脚本:

#!/bin/bash
function_one() {
    echo "okay then"
    return 2
}
function_two() {
    local a_function="function_one"
    local string
    string=`${a_function}`
    local exitcode=$?
    echo "string: $string" # okay then
    echo "exitcode: $exitcode" # 2
}
function_two
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 6

0 是最后执行的命令的退出状态,即echo $string.

如果稍后需要使用退出状态,请将其存储在变量中:

local string
string=`${a_function}`
local status=$?
echo "Output: $string"
echo "Status: $status"
Run Code Online (Sandbox Code Playgroud)

您还需要将变量的赋值和本地化分开,以免获取其状态local