たとえば、001 から 100 まで数えたいとします。つまり、ゼロ バッファーは 2、1 で始まり、100 以上になると最終的に 0 になります。
例: 001 002 ... 010 011 ... 098 099 100
printf "%02d" $i. しかし、それは静的で動的ではなく、私の例では機能しません。
たとえば、001 から 100 まで数えたいとします。つまり、ゼロ バッファーは 2、1 で始まり、100 以上になると最終的に 0 になります。
例: 001 002 ... 010 011 ... 098 099 100
printf "%02d" $i. しかし、それは静的で動的ではなく、私の例では機能しません。
静的と動的という意味で、幅に変数を使用できるようにしたい場合は、次のようにすることができます。
$ padtowidth=3
$ for i in 0 {8..11} {98..101}; do printf "%0*d\n" $padtowidth $i; done
000
008
009
010
011
098
099
100
101
アスタリスクは、引数リストで対応する変数の値に置き換えられます ($padtowidth
この場合)。
それ以外の場合、例が機能しない唯一の理由は、(私の例のように)「3」である必要があるときに「2」を使用することです(おそらく、適用する最大のパディングであるかのように)。その値は結果の合計であるためです。幅 (パッドのみの幅ではありません)。
seq
システムにある場合は、-w
( --equal-width
) オプションを試してください。
$ seq -s, -w 1 10
01,02,03,04,05,06,07,08,09,10
$ for i in `seq -w 95 105` ; do echo -n " $i" ; done
095 096 097 098 099 100 101 102 103 104 105
Bash バージョン 4 (bash -version を使用) では、ブレース展開を使用できます。いずれかの制限の前に置くと0
、数値が強制的にゼロで埋められます
echo {01..100} # 001 002 003 ...
echo {03..100..3} # 003 006 009 ...
#!/bin/bash
max=100;
for ((i=1;i<=$max;i++)); do
printf "%0*d\n" ${#max} $i
done
上記のコードは、最大/最終値に含まれる桁数に基づいて、正しい数の 0 で数値を自動パディングします。変数を変更するだけでmax
、残りは処理されます。
例:
01
02
03
04
05
06
07
08
09
10
001
002
003
004
005
006
...
097
098
099
100
0001
0002
0003
0004
0005
0006
...
0997
0998
0999
1000
# jot is available on FreeBSD, Mac OS X, ...
jot -s " " -w '%03d' 5
jot -s " " -w '%03d' 10
jot -s " " -w '%03d' 50
jot -s " " -w '%03d' 100