创建具有重复字母的字母索引

创建具有重复字母的字母索引

我正在运行 Debian 9。在 Bash 中我可以echo {a..z}输入字母表,或echo {a..z}{a..z}打印字母组合。但是,我想生成一个索引:a b c d等然后aa bb cc dd等然后aaa bbb ccc ddd等等直到它aaaaa bbbbb(直到zzzzz)。如何通过大括号扩展或其他类似方法来完成此操作?谢谢

答案1

你可以这样做:

$ printf '%s ' {a..z}; echo
a b c d e f g h i j k l m n o p q r s t u v w x y z

$ printf '%s%s ' {a..z}{,}; echo
aa bb cc dd ee ff gg hh ... ss tt uu vv ww xx yy zz 

$ printf '%s%s%s ' {a..z}{,,}
aaa bbb ccc ddd eee ... ttt uuu vvv www xxx yyy zzz

解释:大括号扩展将为每个由逗号(和前导字符串)分隔的值创建一个参数:

$ echo A{d,u,j}
Ad Au Aj

但是,如果该值为空,它将仅重复前导字符串:

$ echo A{,,}
A A A

如果前导字符串本身是大括号扩展,则其所有字符串都将重复:

$ echo {one,two}{,,}
one one one two two two

然后,使用 printf (和尾随的 echo)来格式化输出:

$ printf '%s%s%s ' {one,two}{,,}; echo
oneoneone twotwotwo

使用一个字母值:

$ printf '%s%s%s ' {a..d}{,,}; echo
aaa bbb ccc ddd

答案2

AFAIK 你不能仅仅通过bash一些扩展魔法来做到这一点。但你可以随时使用

for c in {a..z}; do echo $c$c; done
for c in {a..z}; do echo $c$c$c; done
...

答案3

这是 Bash 中的另一个选项。

index=$(echo -n {a..z})
num=2
until ((num>5)); do
    for c in {a..z}; do
        case "$num" in
            2 ) index=$(echo -n "$index $c$c") ;;
            3 ) index=$(echo -n "$index $c$c$c") ;;
            4 ) index=$(echo -n "$index $c$c$c$c") ;;
            5 ) index=$(echo -n "$index $c$c$c$c$c") ;;
        esac
    done
((num++))
done
echo "$index"
  1. 将第一组添加到index.
  2. 剩余四组循环四次。
  3. for对每个字母运行循环。
  4. case循环中的语句确定for每个字母添加到索引中的实例数。

相关内容