UNIX Shell中如何用命令退出码单行递增计数器变量?
解决方法:单行实现计数器累加命令退出码
嘿,这个问题我之前踩过坑!你之前的写法问题出在对$?的处理上——$?本身就是直接能拿到上一条命令退出码的特殊变量,不需要再额外套一层$((...))啦。
正确的单行实现有两种常用方式:
方式一:标准算术扩展写法
counter=$((counter + $?))
方式二:更简洁的自增语法
Bash支持更紧凑的算术赋值写法,效果完全一样:
((counter += $?))
举个例子验证一下
比如我们先初始化计数器,然后执行不同的命令测试:
counter=0 false # 这条命令的退出码是1 ((counter += $?)) echo $counter # 输出1 true # 这条命令的退出码是0 ((counter += $?)) echo $counter # 还是输出1
你之前的counter=$((counter+$((?))))写法失败,是因为$((?))里的?在算术表达式中没有特殊含义,Bash会把它当成一个未定义的变量(默认值为0),所以根本没拿到真正的退出码~
内容的提问来源于stack exchange,提问作者MattS
相关产品推荐
相关产品推荐

