![Bash 没有返回 $?变量正确](https://linux22.com/image/38154/Bash%20%E6%B2%A1%E6%9C%89%E8%BF%94%E5%9B%9E%20%24%EF%BC%9F%E5%8F%98%E9%87%8F%E6%AD%A3%E7%A1%AE.png)
Bash 没有返回 $?当命令输出分配给局部变量时,变量正确:
test() {
aaa=$(eval "timeout 1s sleep 5s")
echo $? # echoes 124 (!=0 as expected)
local aaa=$(eval "timeout 1s sleep 5s")
echo $? # echoes 0
}
为什么?
答案1
local
本身就是一个命令(它是 shell 内置命令),因此您将获得 的返回值local
,而不是命令替换中管道的返回值。您可以考虑在赋值之前将变量声明为 local,这将避免local
在与命令替换相同的管道中调用内置变量,这将避免模糊命令的退出代码:
foo() {
local bar
bar=$(baz)
echo $?
}