printf做什么?这是奇怪的输出,我不明白为什么

时间:2018-02-08 18:20:03

标签: bash printf octal

在Mac High Sierra的终端上使用Bash。

所以这段代码应该确保一个三位数字。我用printf做了这个。我创建了bash文件。这将获取一个数字,然后将其转换为三位数并打印。但它确实有一些奇怪的东西,我想知道为什么。

如果输入正常数字1,2,3 ......一切正常。 如果输入三位数字001 ... 007一切正常。

示例:

  • 输入1输出001.
  • 输入04输出004。
  • 输入005输出005。

到目前为止一切顺利。

现在这就变得很奇怪了。

  • 如果我输入008,则输出000。
  • 如果我输入009则输出000。
  • 如果输入010,则输出008。
  • 如果我输入019则输出000。
  • 如果我输入030则输出024。
number=$1
digit=$(printf "%03d" $number)
echo num: $number
echo digit: $digit

1 个答案:

答案 0 :(得分:0)

当您输入带有前导0的数字时,它会将其视为八进制(即基数为8)的数字(因此010 - > 8十进制数。它将以十进制打印,并且您的格式arg表示打印宽度为3(因此它打印008)。

009打印000的原因是因为9不是八进制中的数字(仅0-7),所以该数字只是被忽略,因此它会打印{{ 1}}宽度为3(0)。