我刚开始学习 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。我错过了什么吗?