
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
zsh
1995 年からサポートされています(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