Created SC1102 (markdown)

koalaman
2016-02-06 22:53:44 -08:00
parent 28a3dfff00
commit ae5d10bc77

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.