Ult*_*awk 12 bash variable exit-status
在我的项目中,我有以下代码段:
local output="$(bash "${1##*/}")"
echo "$?"
Run Code Online (Sandbox Code Playgroud)
这总是打印零,因为local,但是,删除local会导致$?变量正确运行:假设子shell 的退出代码。
我的问题是:如何在捕获退出值的同时保持这个变量本地化?
Wil*_*ard 29
在分配给它之前声明局部变量:
thing() {
local output
output="$(bash "${1##*/}")"
echo "$?"
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这也比设置附加RET变量更具可读性。YMMV,但它的工作原理与您期望的一样。
Dop*_*oti 19
#!/bin/bash
thing() {
local foo=$(asjkdh) ret="$?"
echo "$ret"
}
Run Code Online (Sandbox Code Playgroud)
这将 echo 127,“未找到命令”的正确错误代码。
您可以使用local来定义多个变量。所以我也只是创建了局部变量RET来在local成功之前捕获子shell的退出代码并设置$?为零。