mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Created SC1106 (markdown)
35
SC1106.md
Normal file
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!
|
Reference in New Issue
Block a user