填充数为零的意外算术结果

时间:2018-11-08 09:50:03

标签: shell arithmetic-expressions

我的脚本中有一个问题,我正在读取文件,并且每一行都有代表金额的数据。所述字段的长度始终为12,并且始终为整数。假设我有25,000,数据看起来像这样000000025000

显然,我必须获得这些行的总数,但是零前缀正在干扰计算。如果我将上述数字添加到这样的零值:

echo $(( 0 + 000000025000 ))

我得到25000而不是10752。我当时想遍历000000025000,当我最终得到一个非零值时,我将从该索引开始对数字进行子串化。但是,我希望对此必须有一个更优雅的解决方案。

2 个答案:

答案 0 :(得分:2)

数字000000025000是一个以0开头的八进制数字。

如果将bash用作shell,则可以使用前缀10#强制将基数设置为十进制:

echo $(( 10#000000025000 ))

在bash手册页中:

  

以0开头的常量被解释为八进制数。前导0x或0X表示十六进制。否则,数字采用[base#] n的形式,其中可选的底数是2到64之间的十进制数字,代表算术底数,而n是该底数中的数字。

答案 1 :(得分:0)

使用Perl

$ echo "000000025000" | perl -ne ' { printf("%d\n",scalar($_)) } '
25000