From 434a724627e8e87b4ec92021ac590208a0bfa590 Mon Sep 17 00:00:00 2001 From: Glenn Jackman Date: Fri, 26 Jul 2019 13:25:58 -0400 Subject: [PATCH] Add another required case for using $ in an arithmetic expression, one that too many people tend to forget about. --- SC2004.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/SC2004.md b/SC2004.md index c5a7941..0f09cba 100644 --- a/SC2004.md +++ b/SC2004.md @@ -25,3 +25,15 @@ $ echo $((a * 5)) # evaluates as (1+1)*5 ``` The `$` is unavoidable for special variables like `$1` vs `1`, `$#` vs `#`. It's also required when adding modifiers to parameters expansions, like `${#var}` or `${var%-}`. ShellCheck does not warn about these cases. + +The `$` is also required (and not warned about) when you need to specify the *base* for a variable value: + +```sh +$ a=09 +$ echo $((a + 1)) # leading zero forces octal interpretation +bash: 09: value too great for base (error token is "09") +$ echo $((10#a + 1)) +bash: 10#a: value too great for base (error token is "10#a") +$ echo $((10#$a + 1)) +10 +``` \ No newline at end of file