bash:无法正确输出7位长整数

时间:2012-09-13 15:26:40

标签: bash shell

如果我尝试打印长度为6位或更少的整数,一切都很完美:

实施例

for i in $(seq 123450 123451); do printf "%7.0f\n" $i; done
  

123450

     

123451

但是,当整数长度为7位或更多时,数字的最后一位数字输出为“0”:

实施例

for i in $(seq 1234560 1234561); do printf "%7.0f\n" $i; done
  

1234560

     

1234560

问题:我遇到什么问题以及如何使用“长”整数?

2 个答案:

答案 0 :(得分:2)

默认情况下,seq以%g格式打印输出:

$ seq 1234560 1234561
1.23456e+06
1.23456e+06

所以请改用seq -f "%7.0f"

$ seq -f "%7.0f" 1234560 1234561
1234560
1234561

或只是seq -f "%.0f"

$ seq -f "%.0f" 1234560 1234561
1234560
1234561

答案 1 :(得分:1)

对于shell,一切都是字符串,最好避免使用浮点转换和计算,并留到bc(1)。这应该有效:

 for i in $(seq 123450 123451); do printf "%s\n" $i; done