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"?
您可以通过显式强制基数为10来覆盖"前导0表示八进制" 10#:
sum=$(( 10#$sum + 10#$line ))
Run Code Online (Sandbox Code Playgroud)
请注意,虽然您通常可以$在算术上下文中保留off变量引用,但在这种情况下您需要它.此外,如果变量具有前导空格(在第一个"0"之前),则它将无法正确解析.