带有局部变量的命令的退出状态

bla*_*nda 9 bash shell-script

我在一个函数中有一个命令,它的输出放在一个局部变量中。我想获得该命令的退出状态,但$?总是返回 0。当我使用非局部变量时,我得到了预期的退出状态。

下面是一个例子:

function my_fun() {
   local output=$(ls no_file_here_buddy)
   echo $?  # returns 0

   non_local_var=$(ls no_file_here_buddy)
   echo $? # returns 2
}

Run Code Online (Sandbox Code Playgroud)

如何获得输出存储在局部变量中的命令的退出状态?

cho*_*oba 21

使用时local$?包含 的退出代码local,而不是您的命令的退出代码。只需将变量的声明与赋值分开:

local output
output=$(ls no_file_here_buddy)
echo $?
Run Code Online (Sandbox Code Playgroud)