![如何让“local”捕获退出代码?](https://linux22.com/image/87909/%E5%A6%82%E4%BD%95%E8%AE%A9%E2%80%9Clocal%E2%80%9D%E6%8D%95%E8%8E%B7%E9%80%80%E5%87%BA%E4%BB%A3%E7%A0%81%EF%BC%9F.png)
在我的项目中,我有以下片段:
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
$?