当简单地执行变量赋值并使用命令替换时,我对命令将返回的错误代码感到困惑:
a=$(false); echo $?
它输出 1
,这让我认为变量赋值不会扫描或在最后一个错误代码上产生新的错误代码。但是当我尝试这个时:
false; a=""; echo $?
它输出 0
,显然这是 a=""
返回并覆盖 1
返回的 false
我想知道为什么会发生这种情况,变量赋值有什么特殊性与其他普通命令不同吗?或者只是因为 a=$(false)
被认为是一个命令,只有命令替换部分才有意义?
- 更新 -
谢谢大家,从答案和评论中我明白了“当您使用命令替换分配变量时,退出状态就是命令的状态。” (@Barmar),这个解释非常清晰易懂,但对程序员来说不够准确,我想从 TLDP 或 GNU 手册页等权威机构中看到这一点的参考,请帮我找到它出来了,再次感谢!
原文由 Reorx 发布,翻译遵循 CC BY-SA 4.0 许可协议
在以
$(command)
执行命令时,允许 命令的输出自行替换。当你说:
命令产生的输出
false
存储在变量a
中。此外,退出代码与命令生成的代码相同。help false
会告诉:另一方面,说:
导致分配给
a
的退出代码被返回,即0
。编辑:
引用 手册:
引自 BASHFAQ/002 :