Quiero escribir un script bash para imprimir todas las permutaciones posibles en mayúsculas y minúsculas de una determinada palabra, p. Harley:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
Mi solución ingenua es escribir un bucle for anidado enésimo (n es len (palabra)) para esta palabra específica:
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
Sin embargo, tendría que codificar el script para una palabra diferente nuevamente.
¿Hay una mejor manera de lograr esto?
Respuesta aceptada:
Una solución un poco mejor:
echo {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
Para una escalabilidad completa:
echo harley \
| perl -nle 'print "echo ",
join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c "{}"
Si absolutamente debe tener una palabra por línea, vaya con
for w in {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y};do echo $w;done
gracias al comentario de mattdm
La versión escalable correspondiente sería:
echo harley \
| perl -nle 'print join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c 'for w in {};do echo $w;done'
Por diversión, intente reemplazar "harley" con "supercalifragilisticexpialidocious". Han pasado 5 minutos y mi computadora todavía está procesando este y probablemente nunca termine 🙂