shell:在两个不同的变量中捕获命令输出和return状态

shell: capture command output and return status in two different variables

假设我正在使用 shell,例如 bash 或 zsh,并且假设我有一个写入标准输出的命令。我想将命令的输出捕获到一个 shell 变量中,并将命令的 return 代码捕获到另一个 shell 变量中。

我知道我可以做这样的事情...

command >tempfile
rc=$?
output=$(cat tempfile)

然后,我在 'rc' shell 变量中有 return 代码,在 'output' shell 变量中有命令的输出。

但是,我想在不使用任何临时文件的情况下执行此操作。

此外,我可以这样做以获得命令输出...

output=$(command)

...但是,我不知道如何将命令的 return 代码放入任何 shell 变量中。

任何人都可以建议一种在不使用任何文件的情况下将 return 代码和命令的输出同时获取到两个 shell 变量中的方法吗?

非常感谢。

像以前一样捕获 $?。使用可执行文件 truefalse,我们可以证明 命令替换 确实设置了正确的 return 代码:

$ output=$(true); rc=$?; echo $rc
0
$ output=$(false); rc=$?; echo $rc
1

一次赋值中的多个命令替换

如果一个作业中出现多个命令替换,最后一个命令替换的 return 代码决定作业的 return 代码:

$ output="$(true) $(false)"; rc=$?; echo $rc
1
$ output="$(false) $(true)"; rc=$?; echo $rc
0

文档

来自 man bash 描述变量赋值的部分:

If one of the expansions contained a command substitution, the exit status of the command is the exit status of the last command substitution performed. If there were no command substitutions, the command exits with a status of zero.