在 Unix 中,我尝试在 6 个特定位置创建这些字母的所有可能组合,如下所示:
- 位置 1 - A 或 B 或 C
- 位置 2 - A 或 C
- 位置 3 - 仅 C
- 位置 4 - A 或 D
- 位置 5 - B 或 C
- 位置 6 - C 或 A
例如,组合可以是 AACABC、BACABC、...
UNIX 工具有没有一种快速的方法可以做到这一点?
答案1
要求对应于支撑扩展
{A,B,C}{A,C}C{A,D}{B,C}{C,A}
这扩展到 48 个字符串(48 = 3*2*1*2*2*2 ):
$ printf '%s\n' {A,B,C}{A,C}C{A,D}{B,C}{C,A}
AACABC
AACABA
AACACC
AACACA
AACDBC
AACDBA
AACDCC
AACDCA
ACCABC
ACCABA
ACCACC
ACCACA
ACCDBC
ACCDBA
ACCDCC
ACCDCA
BACABC
BACABA
BACACC
BACACA
BACDBC
BACDBA
BACDCC
BACDCA
BCCABC
BCCABA
BCCACC
BCCACA
BCCDBC
BCCDBA
BCCDCC
BCCDCA
CACABC
CACABA
CACACC
CACACA
CACDBC
CACDBA
CACDCC
CACDCA
CCCABC
CCCABA
CCCACC
CCCACA
CCCDBC
CCCDBA
CCCDCC
CCCDCA
答案2
这听起来像是嵌套循环的工作for
:
#!/bin/bash
for p1 in A B C; do
for p2 in A C; do
for p3 in C; do
for p4 in A D; do
for p5 in B C; do
for p6 in C A; do
echo "$p1$p2$p3$p4$p5$p6"
done
done
done
done
done
done
可能有外部工具可以使这种方式更加优雅,但这种方式是“100% bash”,因此相当可移植。