bash で 08 から 10 までの数字の範囲を作成すると、1 桁の数字の前に 0 が含まれません。

bash で 08 から 10 までの数字の範囲を作成すると、1 桁の数字の前に 0 が含まれません。

CentOS 7.2 を実行しているローカル マシンで、次の操作を実行します。

for i in {8..12}; do echo ${i}; done

私が得たもの:

8
9
10

しかし、私がこれをすると:

for i in {08..10}; do echo ${i}; done

私が得たもの:

08
09
10

しかし、私がアクセスできる CentOS 5.6 を実行しているサーバーでは、両方のコマンドを実行すると同じ出力が得られます。

8
9
10

8 と 9 の前にゼロがないのはなぜですか? これは bash のバージョンが原因ですか、それとも環境設定だけですか? セッションごとに、または永続的に変更して、サーバーが 10 未満の数字の前にゼロを配置するようにできますか?

答え1

CentOS 5.6 マシンの はバージョン 3 である可能性がありますbash。 中括弧展開における整数のゼロ埋めは、 のバージョン 4 で導入されましたbash

解決策としては、より新しいバージョンにインストールを更新するbashか、ゼロ埋めされた整数を生成する別の方法を使用することです。

printf '%02d\n' {8..10}

あるいは、次のようなもの

for i in 0{1..9} {10..20}; do
    echo "$i"
done

も動作します。

答え2

を使用する代わりに、その構文の由来である をbash使用できます。zsh

zsh1995 年からサポートされています(2.6-beta4 で導入)。そのため、CentOS のどのバージョン{08..10}でも利用できます(CentOS の最初のリリースは 2004 年)。zsh

zsh実際に例では、の展開が単語分割の対象とならないように(したがって に依存しないように)bashするために、 の代わりに のような構文を使用しました。echo "${i}"echo ${i}$i$IFS

答え3

代わりに、seqコマンドを使用することもできます

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

関連情報