在Linux中是否可以迭代一系列长度超过一个的字母或数字?
例如:AAA,AAB...ZZY,ZZZ
或000...999
,保留零
我明白你可以这样做:
for letter in {a..z}
但你不能合法地添加更多的字符,有没有办法在没有三重嵌套循环的情况下做到这一点?
答案1
for string in {A..Z}{A..Z}{A..Z}; do
# use "$string" here
done
该循环将迭代 17576 次(26*26*26 次)。
000
要创建和之间的所有零填充数字,您可以在版本 4 或更高版本中999
使用。{000..999}
bash
在 的早期版本中bash
,您可能希望使用与上面的循环相同的技术。
或者,你可以使用
for number in {0..999}; do
printf -v znumber '%.3d' "$number"
# use "$znumber" here
done
其中znumber
是通过一种printf
格式创建的,该格式显式地将整数从 中填充到三个位置$number
。
答案2
再进行两个扩展:
$ printf "%s\n" {a..z}{a..z}{a..z} | head -n 5
aaa
aab
aac
aad
aae
$ printf "%s\n" {a..z}{a..z}{a..z} | tail -n 5
zzv
zzw
zzx
zzy
zzz
Bash 支持数字的填充扩展:
$ printf "%s\n" {000..999} | head -n 5
000
001
002
003
004