O problema é que isso se torna muito rápido: todas as permutações de 6 caracteres ao longo de 36 (minúsculas + dígitos): 36 ** 6 = 2176782336, que são 2176 milhões. Multiplique pelo tamanho (6) e você precisa de 12 Gigabytes. Então você não pode realmente gerar toda a lista. Se você não pode usar "geradores" como em Python (que geram valores de loop conforme necessário), é necessário fazer algo como:
for t1 in $chars; do
for t2 in $chars; do
for t3 in $chars; do
for t4 in $chars; do
for t5 in $chars; do
echo $t1$t2$t3$t4$t5
done
done
done
done
done
Se você precisar de strings mais curtas:
#! /bin/bash
chars=('' a b c)
for t1 in "${chars[@]}"; do
for t2 in "${chars[@]}"; do
for t3 in "${chars[@]}"; do
echo $t1$t2$t3
done
done
done
De acordo com o meu monitor de sistema, o código não aumenta significativamente a memória usada pelo processo bash (em torno de 2MB, enquanto produz 29.5MB de saída de acordo com pv -b
). Para comparação, este código equivalente (com listas ligeiramente mais curtas):
for t in {a..t}{a..t}{a..t}{a..t}{a..t} ; do
echo $t
done
Leva 600MB de RAM para rodar.
Escolha sabiamente:)