1. Overview
In Bash, values are untyped but usually treated as strings. Converting values to numbers is primarily meant for calculations, especially for creating scripts. In this tutorial, we will explore alternatives for those conversions when dealing with numbers in the Linux command-line interface.
2. Introduction to the Problem
When trying to perform a sum, we might instead be getting a concatenation. Let’s see an example:
$ a=1
$ b=2
$ c=$a+$b
$ echo $c
1+2
In the example above, we tried to sum 1 and 2, assigned to variables a and b. However, when printing the result, we see a concatenated string 1+2.
3. expr
The command expr evaluates expressions while converting values to numbers when the expression is an arithmetic calculation.
Let’s try an example with a sum operation:
$ a=1
$ b=2
$ expr $a + $b
3
In the example above, we evaluated the sum between 1 and 2, assigned to variables a and b, which resulted in 3. expr converts all values as needed but does not support floating point values.
4. The Double-Parentheses Construct
The double-parentheses construct is part of the basic Bash features and is designed for evaluating arithmetic expansions.
Let’s perform a calculation:
$ a=1
$ b=2
$ c=$((a + b))
$ echo $c
3
In the example above, we assigned the result of the calculation to a variable, c. Basically, this construct works similar to the expr command but adheres to the Bash syntax and still does not support floating point values.
5. let Built-in Command
In Bash, let is a built-in. Just as the double-parentheses construct and expr, it evaluates arithmetic expressions.
Let’s see an example with let:
$ a=1
$ b=2
$ let c=a+b
$ echo $c
3
In the example above, we first assigned the values 1 and 2 to variables a and b. Then, we assigned the result of the sum to another variable, c.
Printing the result with echo showed us the result, 3.
6. awk
The awk command is a very powerful and versatile tool. One of its functionalities is the possibility to perform arithmetic expressions.
We can pipe the values into awk, like the following example:
$ a=1
$ b=2
$ echo $a $b | awk '{print $1 + $2}'
3
In the example above, we assigned the values to variables a and b, then performed the calculation. The references $1 and $2, in awk, point to the first and second values printed with echo, separated by whitespace.
Crucially, awk supports floating point values:
$ echo 1 2 | awk '{print $1 / $2 }'
0.5
Let’s explore another tool which supports more complex calculations.
7. bc
The bc tool is a calculator language designed to be used in the terminal interface. We can either input calculations into a file and process them with bc or pipe them to bc with echo or cat.
Let’s perform a calculation as an example:
$ a=1
$ b=2
$ c=3
$ d=4
$ echo $a+$b+$c+$d | bc
10
In the example above, we printed the string 1+2+3+4 and then piped it into bc, which converted the string to an actual calculation with the correct answer – 10.
Unlike the options above, bc is less likely to be part of a default Linux distribution.
8. Conclusion
In this article, we learned that we could also use Bash for numeric operations. However, using numerical values is not the default behavior, so we need to convert them to numbers or even convert a calculation string with a tool.
Thus, we explored how to do so with expr, the double parentheses construct, the let built-in command, awk, and bc. That enables us to, for instance, perform arithmetic calculations within Bash.