Chapter 5. Expressions and Arithmetic
Bash offers many different ways to do the same thing—and some almost-identical syntax to do very different things.
Often, it’s just the difference of a few special characters.
We’ve already seen ${VAR} and ${#VAR}, where the first expression returns the value of the variable but the second returns its string length (“Variable Reference”). Or ${VAR[@]} and ${VAR[*]} with their quoting differences (“Quotes and Spaces”).
Other bash idioms might make you wonder:
when should you use two or just one set of square brackets? Or even none?
What, if any, is the difference between (( ... ))
and $(( ... )) ?
Usually there is some common meaning in the symbols across their various uses that hints at some semblance of reason behind the syntax.
Sometimes the choice of expression was more for historical reasons.
Let’s take a look and see if we can explain some of these idiomatic pattern and arithmetic expressions.
Integer Only
The bash shell uses only integer arithmetic.
Its main purpose is for counting things: iterations, numbers of files, sizes in bytes.
What if you want or need a floating point calculation?
After all, the sleep command now allows a fractional value: sleep 0.25 will sleep for a quarter of a second.
What if you want to sleep multiples of a quarter of a second?
You’d like to write sleep $(( 6 * 0.25 )), but that won’t work.
The easiest solution is to do the calculation using another program like bc or awk. For example, here’s a script called ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access