diff --git a/SC2071.md b/SC2071.md new file mode 100644 index 0000000..7ae5deb --- /dev/null +++ b/SC2071.md @@ -0,0 +1,30 @@ +## > is for string comparisons. Use -gt instead. + +### Problematic code: + +```sh +if [[ $var > 10 ]] +then + echo "Triggers when var=5 and var=20" +fi +``` + +### Correct code: + +```sh +if [[ $var -gt 10 ]] +then + echo "Correct numerical comparison" +fi +``` +### Rationale: + +`<` and `>`, in both `[[` and `[` (when escaped) will do a lexicographical comparison, not a numerical comparison. + +This means that `[[ 5 > 10 ]]` is true because 5 comes after 10 alphabetically. Meanwhile `[[ 5 -gt 10 ]]` is false because 5 does not come after 10 numerically. + +If you want to compare numbers by value, use the numerical comparison operators `-gt`, `-ge`, `-lt` and `-le`. + +### Exceptions: + +None. \ No newline at end of file