为什么有些人出错时退出 -1 而不是退出 1?

Why do some people exit -1 rather than exit 1 on error?

我正在编写一个相当简单的 bash 脚本;如果我检测到一个错误(不是来自其他进程的错误退出状态),我想以一个指示错误的退出状态退出(不太具体)。

看来我应该做 exit 1(例如,根据 the TLDP Advanced Bash Scripting Guide, and the C Standard Library's stdlib.h header);但是我注意到很多人 exit -1。这是为什么?

TLDP 的 ABS 的有效性值得怀疑(因为它经常使用,没有评论,低于标准的做法)所以我不会把它作为正确性的特殊堡垒。

所述有效命令 return 代码在 0255 之间,其中 0 为 "success"。所以是的,1 是一个完全有效(且常见)的错误代码。

显然我不能确定为什么其他人会那样做,但我对这个话题有两个想法。

  1. 上下文切换失败(可能与缺乏领域知识相结合)。

    在许多语言中,函数中 -1 的 return 值是一个完全有效的值,并且从所有可能(假设)通常为 return 的正值中脱颖而出编辑

    因此尝试将该模式(作者随着时间的推移逐渐掌握)扩展到 shell script/etc。对他们来说是一件合理的事情。特别是如果他们没有领域知识来意识到有效的 return 代码在 0 255.

  2. 之间
  3. 尝试从正常退出情况(可能成功也可能不成功退出)中获得这些错误退出行 "stand out",以试图在视觉上区分一组极不可能的情况或其他异常退出案例。

    实际上,-1 的退出确实有效,它不会让您获得 -1 的 return 代码,而是让您获得 return 的代码 255。 (在你的 shell 中尝试 (exit -1); echo $? 看看。)所以这并不是一件完全不合理的事情(尽管在混淆退出代码方面令人困惑和同谋)。