In fish, true seems to equal 0:
❯ if true == 0; echo "YES"; else; echo "NO"; end
YES
But false seems to not equal 1:
❯ if false == 1; echo "YES"; else; echo "NO"; end
NO
In bash both of them are not equivalent to their numeric value:
$ if [ true == 0 ]; then echo "YES"; else echo "NO"; fi
NO
$ if [ false == 1 ]; then echo "YES"; else echo "NO"; fi
NO
It seems strange that fish would be consider one truth value equal to its numeric counterpart but not the other.
Maybe there is an explanation for that?
CodePudding user response:
The command true ignores arguments and exits with zero exit status meaning success.
if true you can put literally anything here; echo "YES"; else; echo "NO"; end
The command false ignores arguments and exits with non-zero exit status which means failure.
if false you can put literally anything here too; echo "YES"; else; echo "NO"; end
The equivalent Bash code is:
if true anything here; then echo "YES"; else echo "NO"; fi
if false anything here too; then echo "YES"; else echo "NO"; fi
The command [ true == 0 ] executes the command [ and compares the string true to the string 0. Because true and 0 are different strings, the comparison is (logically) false, so [ command exits with non-zero exit status. Similarly with false == 0. Note that == is an extension to [ - it's [ true = 0 ] in standard [.
You can compare that in Fish the [ command also "both of them are not equivalent to their numeric value" too:
if [ true == 0 ]; echo "YES"; else; echo "NO"; end
if [ false == 1 ]; echo "YES"; else; echo "NO"; end
