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
bash
zsh
代わりに、その構文のソースを使用できます。
zsh
1995年(2.6-beta4で導入)からサポートされ、すべてのCentOSバージョン(2004年のCentOSの最初のバージョン){08..10}
で使用できます。zsh
拡張が単語分割の対象にならないように(したがってそれに依存しないように)、実際に必要なように、例ではzsh
構文を使用しました。bash
echo "${i}"
echo ${i}
$i
$IFS
答え3
seq
または、次のコマンドを使用できます。
$ seq -f "%02g" 8 10
08
09
10