【发布时间】:2017-06-16 10:28:43
【问题描述】:
我刚开始学习 bash,正在阅读有关 the $? variable 的信息。据我了解,$? 分配给最后执行的命令的退出状态。
例如
$ false; echo $?
将产生 1,并且
$ false; :; echo $?
将产生 0
当我将这些与 if/for 块结合使用时,事情会变得更加复杂。手册页内容如下:
for名称 [in单词 ...];do命令;done为列表中的每个成员执行命令。
for循环为每个成员执行一系列命令 物品清单。如果in WORDS ...;不存在,则in "$@"存在 假定。对于 WORDS 中的每个元素,NAME 被设置为该元素,并且 COMMANDS 被执行。退出状态:
返回最后执行的命令的状态。
这意味着:
$ 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。我错过了什么吗?
【问题讨论】:
标签: bash exitstatus