为啥使用 += 在 bash 中存储命令的退出状态?
Posted
技术标签:
【中文标题】为啥使用 += 在 bash 中存储命令的退出状态?【英文标题】:Why use += to store a command's exit status in bash?为什么使用 += 在 bash 中存储命令的退出状态? 【发布时间】:2020-02-11 13:31:18 【问题描述】:最近我在 Bash 脚本中遇到了这种模式:
function foo
declare -i status=0
# command(s)
(( status += $? ))
return $status
为什么有人会使用+=
来保存退出状态(而不仅仅是status=$?
)?
【问题讨论】:
这可以推测,但对我来说作者的意图是对所有退出代码求和然后返回这个和 这取决于上下文。例如当status=256
,return $status
将与return 0
相同。所以总结所有退出代码并不总是有意义的。另一方面,如果上下文中的所有命令在某些条件下都返回 1,否则返回 0,则 foo
可以用作计数器。
【参考方案1】:
POSIX standard 限制 the exit status code for an application to int
。这意味着您可以针对特定错误返回特定代码,例如:
0 - 没有失败 1 - IO 异常 2 - 运行时异常 3 - 高清头部碰撞 等等
但是,如果您的应用程序由于多种原因而崩溃怎么办?传达这一点的一种方法是返回一个类似于the 777 when dealing with permissions 的退出代码的总和:
0 - 没有失败 1 - IO 异常 2 - 运行时异常 4 - 高清头部崩溃
现在,如果你能对异常进行求和,总和会告诉你出了什么问题:
3 = 1 + 2 = IO 异常 + 运行时异常 5 = 1 + 4 = IO 异常 + HD 磁头崩溃 6 = 2 + 4 = 运行时异常 + 高清磁头崩溃 7 = 1 + 2 + 4 = IO 异常 + 运行时异常 + 高清磁头崩溃
这可能是它们返回退出代码总和的原因。
【讨论】:
以上是关于为啥使用 += 在 bash 中存储命令的退出状态?的主要内容,如果未能解决你的问题,请参考以下文章
bash 脚本在变量中使用剪切命令并将结果存储在另一个变量中
为啥linux 的 source命令在linux的脚本中没有作用 我使用了#!/bin/sh以及#!/bin/bash 都不好用