我很困惑这个命令在明确地执行变量赋值时会返回什么错误代码并且使用命令替换:
a=$(false); echo $?
Run Code Online (Sandbox Code Playgroud)
它输出1,让我认为变量赋值不会扫描或产生最后一个错误代码.但是当我尝试这个时:
false; a=""; echo $?
Run Code Online (Sandbox Code Playgroud)
它输出0,显然这是a=""返回和它覆盖1返回的false.
我想知道为什么会发生这种情况,变量赋值中是否存在与其他正常命令不同的特殊性?或者只是因为a=$(false)被认为是一个命令,只有命令替换部分才有意义?
- 更新 -
谢谢大家,从答案和评论中我得到了"当您使用命令替换分配变量时,退出状态是命令的状态." (由@Barmar提供),这个解释非常清晰易懂,但对于程序员来说说话不够精确,我想从TLDP或GNU手册页等权威人士那里看到这一点的参考,请帮我找到它出来,再次感谢!