带有零填充数字的意外算术结果

Unexpected arithmetic result with zero padded numbers

我的脚本有问题,我正在读取一个文件,每行都有表示数量的数据。所述字段的长度始终为 12,并且始终为整数。假设我有 25,000 笔,数据将如下所示 000000025000.

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

echo $(( 0 + 000000025000 ))

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

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

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

echo $(( 10#000000025000 ))

来自 bash 手册页:

Constants with a leading 0 are interpreted as octal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, numbers take the form [base#]n, where the optional base is a decimal number between 2 and 64 representing the arithmetic base, and n is a number in that base.

使用 Perl

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