中かっこ拡張を使用して前にゼロのシーケンスを作成する方法

中かっこ拡張を使用して前にゼロのシーケンスを作成する方法

以下を使用すると、予想される結果が得られます。

$ echo {8..10}
8 9 10

この中括弧拡張を簡単な方法で使用して次の出力を取得するにはどうすればよいですか?

$ echo {8..10}
08 09 10

私はこれがseq(試行せずに)を使用して取得できると思いますが、それは私が望むものではありません。

有用な情報は、私がこのバージョンのbashに制限されていることです。 (解決策はありますが解決策がzshない場合はbash共有してください)

$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)

答え1

0各項目の幅を同じにするには、最初の数字の前にを付けます。

$ echo {08..10}
08 09 10

中かっこ拡張の bash のマニュアルページから:

指定された整数の前にゼロを付けて、各項目の幅を同じにすることができます。 xまたはyが0で始まる場合、シェルは生成されたすべての用語が同じ桁数を含むように強制し、必要に応じて0を埋めます。

また、オプションを使用して前にゼロを埋めることで幅を均等化することもできますseq-w

$ seq -w 8 10
08
09
10

$ seq -s " " -w 8 10
08 09 10

さらに制御したい場合は、printfスタイルの書式を指定することもできます。

$ seq -s " " -f %02g 8 10
08 09 10

答え2

私はGNU bash, version 3.2.51(1)-release元のポスター()と同じbashバージョンを持っていますが、{08..12}それは私には機能しませんが、次はうまくいきます:

for i in 0{8..9} {10..12}; do echo $i; done
08
09
10
11
12

これは少し退屈ですが、OPバージョンのbash(最新バージョンだと思います)ではうまくいきます。

答え3

printfを使用する場合

printf "%.2d " {8..10} 

これにより、2 つの文字が強制的に適用され、先頭にゼロが追加されます。 3桁の数字が必要な場合は、「%.3d」に変更できます。

答え4

ちなみに、自動固定幅は最新バージョンのbashにのみ表示されるようです。

$ bash -version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

$ echo test{00..05}
test0 test1 test2 test3 test4 test5

関連情報