In bash, we can use the && operator to execute two commands. For example:
./foo && ./bar
Will first execute foo
The C language convention that 0 is false and anything else true, is just that, a convention. Bash (and unix shells in general), use the opposite convention: 0 is true, anything else is false.
$ if ( exit 0 ); then echo true; else echo false; fi
true
$ if ( exit 1 ); then echo true; else echo false; fi
false
$ if ( exit 2 ); then echo true; else echo false; fi
false
Because of this, the true
command always exits with a status of 0, while false
exits with a status of 1.
$ true; echo $?
0
$ false; echo $?
1
This can be rather disconcerting for someone who's used to the C convention, but it makes a lot more sense in shell terms that truth=success=zero exit status, while false=failure=nonxero exit status.