В зависимости от того, насколько точным вам нужно это сделать, и сносными накладными расходами, вы можете уйти с чем-то вроде
echo {\ ,{A..Z},{a..z},{0..9}}{\ ,{A..Z},{a..z},{0..9}}{\ ,{A..Z},{a..z},{0..9}}
Где бы вы повторили {\, {A ..Бит Z}, {a..z}, {0..9}} для каждого набора - т. Е. Если вы хотите, чтобы каждое слово было не более 10 символов, вы бы повторили его 10 раз.
В этом есть недостаток кода (поскольку он не распознает "нет символа" в начале, я использовал «» в качестве заполнителя. Это создаст дубликаты - то есть "99" и "99". Вы можете избавиться от них, протолкнув его через фильтр sort | uniq (и, возможно, также используя tr), но в зависимости от вашего приложения и размера конечного результата, вы можете столкнуться со временем, которое потребуется для создания список.
Чтобы создать список, который будет выводить все перестановки без дубликатов, но в порядке, отличном от вашего исходного ввода, вы можете использовать
for each in {\ ,{A..Z},{a..z},{0..9}}{\ ,{A..Z},{a..z},{0..9}}{\ ,{A..Z},{a..z},{0..9}} ; do echo $each; done | tr -d " " | sort -u