Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I do bash arithmetic with variables that are numbers with leading zeroes? [duplicate]

I have the following code in a bash script, where "values" is a variable of newline separated numbers, some of which have leading 0's, and I am trying to iterate through each value in values and add each value to the variable "sum".

sum=0
while read line; do
    sum=$(( sum + line ))
done <<< "$values"

this code segment gives me the error: "value too great for base (error token is "09")", which as I understand, is because the bash arithmetic expression interprets the value "line" to be an octal value because it has a leading zero.

How can I allow for bash to interpret the value of line to be its decimal value? (e.g. 09 -> 9) for the value "line" within this bash arithmetic expression?

like image 373
TheDarkHoarse Avatar asked Dec 08 '22 13:12

TheDarkHoarse


1 Answers

You can override the "leading 0 means octal" by explicitly forcing base ten with 10#:

sum=$(( 10#$sum + 10#$line ))

Note that, while you can usually leave the $ off variable references in arithmetic contexts, in this case you need it. Also, if the variable has leading spaces (in front of the first "0"), it won't parse correctly.

like image 122
Gordon Davisson Avatar answered Dec 10 '22 01:12

Gordon Davisson