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