如何使用带有前导零的数字变量进行bash算术?

The*_*rse 3 bash command-line sh

我在bash脚本中有以下代码,其中"values"是新行分隔数字的变量,其中一些具有前导0,我试图迭代值中的每个值并将每个值添加到变量"sum" .

sum=0
while read line; do
    sum=$(( sum + line ))
done <<< "$values"
Run Code Online (Sandbox Code Playgroud)

这个代码段给了我错误:"对于base来说价值太大了(错误令牌是"09")",据我所知,这是因为bash算术表达式将值"line"解释为八进制值,因为它有一个领先零.

如何允许bash将line的值解释为十进制值?(例如09 - > 9)这个bash算术表达式中的值"line"?

Gor*_*son 8

您可以通过显式强制基数为10来覆盖"前导0表示八进制" 10#:

sum=$(( 10#$sum + 10#$line ))
Run Code Online (Sandbox Code Playgroud)

请注意,虽然您通常可以$在算术上下文中保留off变量引用,但在这种情况下您需要它.此外,如果变量具有前导空格(在第一个"0"之前),则它将无法正确解析.