使用bash使用排列(a-z)填充数组

时间:2017-09-24 04:25:12

标签: arrays bash

我希望使用{a..z}填充数组。最终结果是存储在数组中的a-z中的每个字母都可以用于以后的引用。

代码:

#!/bin/bash
#proof of concept
#echo {a..z}
#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

#attempt 1
CHARSET=({a..z})
printf "${CHARSET[@]}"
#result: a

#attempt 2
CHARSET=({a..z})
for i in CHARSET ; do
    echo "$1"
done
exit
#result a

最终,我试图测试a-z最多4个字符长的每个排列,而不需要从中读取中间文件。

#!/bin/bash
for i in {a..z}; do
for j in {a..z}; do
for k in {a..z}; do
for l in {a..z}; do
echo $i >>test.txt #1 letter
echo $i$j >>test.txt #2 letters
echo $i$j$k >>test.txt #3 letters
echo $i$j$k$l >>test.txt #4 letters
done;done;done;done

test.txt

a
aa
aaa
aaaa
...........
z
zz
zzz
zzzz

我希望能够将a-z存储在一个数组中,然后每次使用该数组将字母数增加到四个。或者有一种更简单的方法可以在这里成功吗? (不创建上例中给出的中间文件)

1 个答案:

答案 0 :(得分:4)

你可以附加多个大括号扩展来组合它们:

for word in {a..z}{a..z}{a..z}{a..z}
do
  echo "$word"
done