为什么 bash 变量赋值会影响最后的退出代码 $?这在哪里记录?

为什么 bash 变量赋值会影响最后的退出代码 $?这在哪里记录?

我惊讶地发现设置环境变量修改了最后一个存在的代码变量$?

$ false
$ echo $?
1
$ false
$ FOO=BAR
$ echo $?
0
$ 

bash 手册只说了这一点$?

($?) 扩展到最近执行的前台管道的退出状态。

正在设置的变量的退出代码记录在哪里?会失败吗?

答案1

如果右侧表达式无法计算,赋值可能会失败

例如

$ x=HELLO
$ x=$((1/0))
bash: 1/0: division by 0 (error token is "0")
$ echo $?
1 

在这种情况下, 的值$x保持不变:

$ echo $x
HELLO

相关内容