数値の前のゼロを除いて、 bash から 08 から 10 までの数値範囲を作成します。

数値の前のゼロを除いて、 bash から 08 から 10 までの数値範囲を作成します。

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を実行しているサーバーで次の2つのコマンドを実行すると、同じ出力が生成されます。

8
9
10

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

答え1

CentOS 5.6システムのバージョンはbashバージョン3である可能性が高いです。中括弧拡張の整数ゼロパディングはのバージョン4で導入されましたbash

回避策は、インストールをbash最新バージョンに更新するか、ゼロで埋められた整数を生成する代替方法を使用することです。

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

または、次のようなもの

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

動作します。

答え2

bashzsh代わりに、その構文のソースを使用できます。

zsh1995年(2.6-beta4で導入)からサポートされ、すべてのCentOSバージョン(2004年のCentOSの最初のバージョン){08..10}で使用できます。zsh

拡張が単語分割の対象にならないように(したがってそれに依存しないように)、実際に必要なように、例ではzsh構文を使用しました。bashecho "${i}"echo ${i}$i$IFS

答え3

seqまたは、次のコマンドを使用できます。

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

関連情報