mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Created SC1102 (markdown)
26
SC1102.md
Normal file
26
SC1102.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
## Shells differ in parsing ambiguous $(((. Use spaces: $( (( .
|
||||||
|
|
||||||
|
### Problematic code:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
echo "$((( n > 0)) && mycommand --flags)"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Correct code:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
echo "$( (( n > 0)) && mycommand --flags)"
|
||||||
|
```
|
||||||
|
### Rationale:
|
||||||
|
|
||||||
|
You are using `$(((` (or `(((`) to mean `$( ((`: command expansion with an arithmetic command. The more common interpretation is `$(( (`: arithmetic expansion with parentheses.
|
||||||
|
|
||||||
|
This is an ill-defined structure that is parsed differently between different shells and shell versions. Prefer adding a space to make it unambiguous, both to shells and humans.
|
||||||
|
|
||||||
|
Consider the `$(((` in `$(((1)) )`:
|
||||||
|
|
||||||
|
Ash, dash and Bash 1 parses it as `$(( (` and subsequently fail to find the matching `))`. Zsh and Bash 2+ looks ahead and parses it as `$( ((`. Ksh parses it as `$( ( (`.
|
||||||
|
|
||||||
|
### Exceptions:
|
||||||
|
|
||||||
|
None.
|
Reference in New Issue
Block a user