One of the common tasks you’ll encounter when scripting in Bash is performing arithmetic operations on variables, particularly division. This process might seem straightforward, but it requires careful attention due to the lack of floating-point support in Bash by default. In this article, we will dive into several methods for dividing variables in Bash, and you’ll discover how to handle the lack of floating-point division in Bash.
Using the ‘expr’ Command
One of the commands you can use for division in Bash is expr
. This command evaluates an expression and prints the result to the console. The basic syntax is:
x=60 y=-3 result=$(expr $x / $y) echo "Result: $result"
In this case, the value of x
is divided by y
, and the result is stored in the result
variable. It’s crucial to remember that the spaces before and after the division operator /
are important. If there are no spaces, the expression supplied to the expr
command is evaluated as a string, causing a syntax error.
However, the expr
command has limitations. It only supports integer division, meaning if the result should be a floating-point number, it will be truncated to an integer. Furthermore, it cannot accept a floating-point number as input.
Utilizing Double Parentheses
Another way to perform division is using the double parentheses syntax. This syntax is a shorthand method for arithmetic operations in Bash:
x=60 y=-9 result=$(($x / $y)) echo "Result: $result"
Unlike the expr
command, the double parentheses syntax doesn’t require spaces before and after the division operator. However, it still only supports integer division and doesn’t accept floating-point numbers as input.
Commanding ‘printf’ for Precision
The printf
command is another handy tool for division in Bash. It can return a floating-point number, giving you a more precise result:
x=60 y=-9 printf "%.4fn" $((10**4 * x/y))e-4
In this example, x
is first multiplied by 10^4, then divided by y
. The format specifier %.4fn
formats the output as a floating-point number with four digits after the decimal point. However, note that the numerator and the denominator must still be integers.
Leveraging the ‘bc’ Command
The bc
(Basic Calculator) command is one of the most versatile tools for division in Bash. Unlike the previous methods, it allows the use of floating-point numbers as input:
x=10.5 y=-2 echo "scale=4; $x / $y" | bc
Here, scale=4
specifies the number of digits after the decimal point in the result. Also, you can use shell variables with the bc
command by using the shell pipe |
.