Created SC1106 (markdown)

Vidar Holen
2021-04-09 10:19:09 -07:00
parent 5eb17a0490
commit 99219bdf93

35
SC1106.md Normal file

@@ -0,0 +1,35 @@
## In arithmetic contexts, use `<` instead of `-lt`
Similarly, `>` instead of `-gt`, `<=` instead of `-le`, `>=` instead of `-ge`, `==` instead of `-eq`, `!=` instead of `-ne`.
### Problematic code:
```sh
if (( 2 -lt 3 ))
then
echo "True"
fi
```
### Correct code:
```sh
if (( 2 < 3 ))
then
echo "True"
fi
```
### Rationale:
The comparators `-lt`, `-ge`, `-eq` and friends are flags for the `test` command aka `[`. You are instead using it in an arithmetic context, such as `(( .. ))` or `$(( .. ))`, where you should be using `<`, `>=`, `==` etc instead.
In arithmetic contexts, `-lt` is simply interpreted as "subtract the value of `$lt`", which is clearly not the intention.
### Exceptions:
If you do want to subtract `$lt` you can add a space to make this clear to ShellCheck: `echo $((3 - lt))`
### Related resources:
* Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!