No Bash ou em algo que suporte matrizes , você pode colocar o conjunto de caracteres em uma matriz e loop sobre a matriz novamente, prefixando os caracteres novamente:
chars=( {a,b,c} )
doubles=()
triplets=()
for c in "${chars[@]}" ; do
doubles+=( ${chars[@]/#/$c} )
done
for c in "${chars[@]}" ; do
triplets+=( ${doubles[@]/#/$c} )
done
echo "${triplets[@]}"
que imprime aaa aab aac ... ccc
e você pode repetir conforme necessário para os mais longos ou transformá-lo em uma função recursiva. (O ${var//}
é uma substituição de padrão em que #
marcas o início da string.Quando é aplicado a um array, aplica-se a todos valores do array, um de cada vez.