如何在bash中生成从A到ZZZZZZZZ的所有组合的字符串

问题描述 投票:0回答:1

我想开始从单个长度的字符生成并生成所有可能的值,直到 (ZZZZZZZZZZ) 10-Zs。

我知道我可以做类似 {A..Z}{A..Z}{A..Z}.... 的事情,但我想增加外循环中字符序列的长度。 有没有办法在bash中实现这个?我尝试了下面的脚本,但问题是 for 循环命令将“{A..Z}”字面意思视为字符串。

#!/bin/bash

seq={A..Z}
cur_seq=""
for i in {0..10}; do
        cur_seq=${cur_seq}${seq}
        for a in $cur_seq; do
                echo $a
                ead kk
        done
done
linux bash
1个回答
0
投票

Bash 是一个非常糟糕的语言选择——我认为这是一个学术练习。

maybe_append() {
  recurse_count=$1; shift
  while IFS= read -r line; do
    for arg in "$@"; do
      printf '%s%s\n' "$line" "$arg"
    done
  done | if (( recurse_count > 1 )) then maybe_append "$((recurse_count - 1))" "$@"; else cat; fi
}

鉴于此,使用更小/更理智的数字的演示如下所示:

$ printf '%s\n' {A..C} | maybe_append 2 '' {A..C}
A
AA
AB
AC
AA
AAA
AAB
AAC
AB
ABA
ABB
ABC
AC
ACA
ACB
ACC
B
BA
BB
BC

...等等

© www.soinside.com 2019 - 2024. All rights reserved.