如何让“local”捕获退出代码?

如何让“local”捕获退出代码?

在我的项目中,我有以下片段:

local output="$(bash "${1##*/}")"
echo "$?"

由于 ,这总是打印零local,但是,删除local会导致$?变量行为正确:这是假设子 shell 的退出代码。

我的问题是:如何将该变量保留为本地变量,同时捕获退出值?

答案1

在分配局部变量之前先声明它:

thing() {
  local output
  output="$(bash "${1##*/}")"
  echo "$?"
}

在我看来,这也比设置附加RET变量更具可读性。 YMMV 对此,但它的工作原理正如你所期望的那样。

答案2

#!/bin/bash
thing() {
   local foo=$(asjkdh) ret="$?"
   echo "$ret"
}

这将回显127“未找到命令”的正确错误代码。

您可以使用local它来定义多个变量。因此,我还创建了局部变量来捕获成功RET之前子 shell 的退出代码并将其设置为零。local$?

相关内容