29

たとえば、001 から 100 まで数えたいとします。つまり、ゼロ バッファーは 2、1 で始まり、100 以上になると最終的に 0 になります。

例: 001 002 ... 010 011 ... 098 099 100

printf "%02d" $i. しかし、それは静的で動的ではなく、私の例では機能しません。

4

6 に答える 6

35

静的と動的という意味で、幅に変数を使用できるようにしたい場合は、次のようにすることができます。

$ 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」を使用することです(おそらく、適用する最大のパディングであるかのように)。その値は結果の合計であるためです。幅 (パッドのみの幅ではありません)。

于 2010-07-07T05:59:13.307 に答える
33

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
于 2010-07-07T00:14:16.177 に答える
12

Bash バージョン 4 (bash -version を使用) では、ブレース展開を使用できます。いずれかの制限の前に置くと0、数値が強制的にゼロで埋められます

echo {01..100} # 001 002 003 ...
echo {03..100..3} # 003 006 009 ...
于 2010-07-07T01:50:39.580 に答える
6
#!/bin/bash

max=100; 

for ((i=1;i<=$max;i++)); do 
    printf "%0*d\n" ${#max} $i
done

上記のコードは、最大/最終値に含まれる桁数に基づいて、正しい数の 0 で数値を自動パディングします。変数を変更するだけでmax、残りは処理されます。

例:

最大=10

01
02
03
04
05
06
07
08
09
10

最大=100

001
002
003
004
005
006
...
097
098
099
100

最大=1000

0001
0002
0003
0004
0005
0006
...
0997
0998
0999
1000
于 2010-07-07T06:14:39.120 に答える
4
# 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   
于 2010-07-07T08:35:00.197 に答える