Updated SC1102 (markdown)

koalaman
2016-06-26 22:11:12 -07:00
parent be1ba26da3
commit 6c299008ea

@@ -1,21 +1,21 @@
## Shells differ in parsing ambiguous $(((. Use spaces: $( (( .
## Shells disambiguate $(( differently or not at all. If the first $( should start command substitution, add a space after it.
### Problematic code:
```sh
echo "$((( n > 0)) && mycommand --flags)"
echo "$((cmd "$@") 2>&1)"
```
### Correct code:
```sh
echo "$( (( n > 0)) && mycommand --flags)"
echo "$( (cmd "$@") 2>&1)"
```
### Rationale:
You are using `$(((` (or `(((`) to mean `$( ((`: command expansion with an arithmetic command. The more common interpretation is `$(( (`: arithmetic expansion with parentheses.
You appear to be using `$((` with two (or more) parentheses in a row, where the first `$(` should open a subshell.
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.
This is an ill-defined structure that is parsed differently between different shells and shell versions. Prefer adding spaces to make it unambiguous, both to shells and humans.
Consider the `$(((` in `$(((1)) )`:
@@ -23,4 +23,6 @@ Ash, dash and Bash 1 parses it as `$(( (` and subsequently fail to find the matc
### Exceptions:
None.
**Alternatively**, you may indeed have correctly spaced your parentheses, but ShellCheck failed to parse `$((` as an arithmetic expression while accidentally succeeding in parsing it as `$(` + `(`.
In these cases, double check the syntax to ensure ShellCheck can parse the `$((`, or ignore this error and hope that it won't affect analysis too severely.