我刚开始学习 bash 并且正在阅读有关变量的$?
信息。据我了解,$?
分配给执行的最后一个命令的退出状态。
例如
$ false; echo $?
将产生 1,并且
$ false; :; echo $?
将产生 0
当我将这些与 if/for 块结合使用时,事情会变得更加复杂。手册页内容如下:
for
名称[in
单词... ];
do
命令;
done
为列表中的每个成员执行命令。
循环为项目列表中的
for
每个成员执行一系列命令。如果in WORDS ...;
不存在,则in "$@"
假定。对于WORDS中的每个元素,将NAME设置为该元素,并执行命令。退出状态:
返回最后执行的命令的状态。
这意味着:
$ false; for i in 1 2 3; do false; done; echo $?
将产生 1,因为执行的最后一个命令为假。但
$ false; for i in; do false; done; echo $?
或者
$ false; if false; then :; fi; echo $?
尽管 false 是最后执行的命令,但将产生 0。
我的猜测是$?
进入 for/if 块时变量设置为 0。我错过了什么吗?