4 ms·
> Note that the exit value of true is 0, and the exit value of false is 1. This is somewhat counterintuitive, and it's the exact opposite of most programming la
by empath75 7y ago
> Note that the exit value of true is 0, and the exit value of false is 1. This is somewhat counterintuitive, and it's the exact opposite of most programming languages.
"Happy families are all alike; every unhappy family is unhappy in its own way."
https://en.wikipedia.org/wiki/Anna_Karenina_principle https://en.wikipedia.org/wiki/Anna_Karenina_principle
- AdmiralAsshat 7y agoIt took me awhile to wrap my head around when I initially encountered it, but the idea made sense after I thought about it. If the process exited successfully, we don't care--it did what it was supposed to do. But if it failed, we'd probably like as much info about why it failed as possible; and so having the exit status be more like an error code clearly has some value.
- elmigranto 7y agoGood point. I think the fact that it’s named “exit status” instead of “error code” is primary confusion factor.
- empath75 7y agoI was being somewhat oblique about it but that was what my quote was saying.
- michaelcampbell 7y agoSome older versions of BASIC did this as well, except false was -1. I think internally it was represented as all 0 bits for true, all 1 bits for false. To be pendantic, at least in terms of bash if's, ['s, and test's, I think 0 is true and non-0 is non-true though, no?
- reportgunner 7y agoThis is there to allow more than just true and false, like warnings and custom exit codes. https://stackoverflow.com/questions/4419952/difference-between-return-and-exit-in-bash-functions https://stackoverflow.com/questions/4419952/difference-betwe... I have also encountered this in C# https://docs.microsoft.com/en-us/dotnet/api/system.environment.exit?view=netframework-4.8 https://docs.microsoft.com/en-us/dotnet/api/system.environme...
- banachtarski 7y agoThe article is wrong though. For error codes, 0 being a success value is the CONVENTION. A non-zero code is an error. This isn't about "programming languages."
- gbacon 7y agoWrong is a bit harsh for a convention or semantics, more like imprecisely worded.
- SAI_Peregrinus 7y agoThe problem is that for bash `true` is a function (or builtin) that returns 0, while for C (and thus most languages) any non-zero value (typically 1 for the builtins) is true. In c99 and later with stdbool.h, `true` is almost always defined as `#define true 1`.
- aidenn0 7y agothe existence of the && and || operators (not to mention the true and false utilities) would indicate it's more than just a convention.
- flingo 7y agoI certainly prefer this to the reverse, and having truth values and return values mean something different.