是否可以在 Linux 循环中迭代一系列比一个字符长的字母和数字?

是否可以在 Linux 循环中迭代一系列比一个字符长的字母和数字?

在Linux中是否可以迭代一系列长度超过一个的字母或数字?

例如:AAA,AAB...ZZY,ZZZ000...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

相关内容