【发布时间】:2018-02-27 01:23:16
【问题描述】:
在我的 bash 脚本中,我设置了以下操作
year=0050
echo $(printf %04d $year)
>0040
我不明白为什么返回 0040 而不是 0050。我最终发现要让系统正确打印 0050,我将不得不这样做。
year=50
echo $(printf %04d $year)
>0050
对于第一个案例发生的原因有什么见解吗?
【问题讨论】:
-
如果你的号码以
0开头,它被解释为八进制;八进制 50 是十进制 40。 -
以
0开头的printf的数字参数被解释为八进制数。另外,你为什么打电话给echo $(printf ...)?echo和printf都打印它们的输出。您可以删除echo。 -
@larsks 也许是因为换行,但显然,使用
%04d\n解决这个问题更好。 -
@larsks 我打电话给 echo 因为我还将月份和日期组合成一个 8 位数的日期,所以整行看起来像: echo $(printf %04d $year)$(printf %02d $month)$(printf %02d $day)
-
您应该使用单个
printf语句来代替,例如printf '%04d%02d%02d\n' "$year" "$month" "$day"。
标签: bash integer printf decimal octal