Bash:在n位字符串中格式化数字

Bash:在n位字符串中格式化数字,bash,string-formatting,Bash,String Formatting,我是一个bash新手。我想以n数字格式回显数字1到x。例如,让我们考虑 n=3 < /代码>:5应该变成005, 13,应该变成013, 110,应该保持110。< /P> 实现这一目标的一种方法是采用这种结构: for i in $(seq 1 120) do if [ "$i" -lt "10" ] then echo "00$i" elif [ "$i" -gt "99" ] then echo "$i" else echo

我是一个bash新手。我想以
n
数字格式回显数字1到
x
。例如,让我们考虑<代码> n=3 < /代码>:5应该变成005, 13,应该变成013, 110,应该保持110。< /P> 实现这一目标的一种方法是采用这种结构:

for i in $(seq 1 120)
do
   if [ "$i" -lt "10" ]
   then
      echo "00$i"
   elif [ "$i" -gt "99" ]
   then
      echo "$i"
   else
      echo "0$i"
   fi
done

但是它非常难看,而且对于更改
n
(位数)的值来说确实不灵活。我更希望有一个函数,它只对
n
数字进行格式化?有没有内置的功能?如果没有,您能帮我创建这样的函数吗?

使用
printf

for i in {1..120} ; do
    printf '%03d\n' $i
done
  • %
    启动格式字符串
  • d
    表示整数
  • 3
    表示长度=3
  • 0
    表示零填充
  • \n
    是一个换行符

    • 使用
      printf

      for i in {1..120} ; do
          printf '%03d\n' $i
      done
      
      • %
        启动格式字符串
      • d
        表示整数
      • 3
        表示长度=3
      • 0
        表示零填充
      • \n
        是一个换行符

      格式说明符
      %03d
      的意思是“用字符
      0
      填充长度为3,输入的是有符号的十进制数”。谢谢您完美地回答了我的问题+1。如果我可以问一个后续问题:有没有办法用这个字符串来读取文件,而不仅仅是在屏幕上打印文件?@Remi.b:要读取输入,请使用
      read
      。若要写入文件,请使用重定向。此代码可以更改为
      printf'%03d\n'{1..120}
      (无需循环),或者您甚至可以使用
      printf'%s\n'{001..120}
      。请注意,
      {001..120}
      仅在版本4或更高版本中受支持,如果您使用Mac OS X,这可能是一个问题(仅提供
      bash
      3.2)。格式说明符
      %03d
      表示“将字符
      0
      填充为长度为3,输入为带符号的十进制数”。谢谢你,这完美地回答了我的问题+1。如果我可以问一个后续问题:有没有办法用这个字符串来读取文件,而不仅仅是在屏幕上打印?@Remi.b:要读取输入,请使用
      read
      。要写入文件,请使用重定向。此代码可以更改为
      printf'%03d\n'{1..120}
      (不需要循环),或者您甚至可以使用
      printf'%s\n'{001..120}
      。请注意,
      {001..120}
      仅在版本4或更高版本中受支持,如果您使用的是Mac OS X(仅提供
      bash
      3.2),这可能会成为一个问题。