【发布时间】:2013-12-08 02:31:32
【问题描述】:
我对在执行变量赋值和命令替换时该命令将返回什么错误代码感到困惑:
a=$(false); echo $?
它输出1,这让我认为变量赋值不会扫描或在最后一个错误代码上产生新的错误代码。但是当我尝试这个时:
false; a=""; echo $?
它输出0,显然这是a=""返回的内容,它覆盖了false返回的1。
我想知道为什么会发生这种情况,变量赋值有什么特殊性与其他普通命令不同吗?或者只是因为a=$(false) 被认为是单个命令,只有命令替换部分才有意义?
-- 更新--
谢谢大家,从答案和 cmets 我得到了一点“当您使用命令替换分配变量时,退出状态就是命令的状态。” (by @Barmar),这个解释非常清晰易懂,但对程序员来说不够准确,我想从 TLDP 或 GNU 手册页等权威机构看到这一点的参考,请帮我找到它出来了,再次感谢!
【问题讨论】:
-
TLDP 不是权威来源——ABS 因展示 bash 中的不良做法而臭名昭著,就像 w3schools 在 JavaScript 世界中一样。
标签: linux bash shell exit-code