Quiero escribir un script bash para imprimir todas las posibles permutaciones en mayúsculas y minúsculas de una palabra determinada, por ejemplo, harley:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
Mi solución ingenua es escribir un n-ésimo (n es len (palabra)) anidado for-loop 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?
printf '%s\n' {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
printf
sed 's/./{&,&}/g'
se convertiríaFoo
en{F,F}{o,o}{o,o}
, lo que sería bastante inútil. Pero agregue\U
y\L
obtendrá la mayúscula y minúscula de cada letra; es decir,{F,f}{O,o}{O,o}
.eval
para decirle al shell que expanda las secuencias de llaves { X , x }.fuente
EDITAR 2: Esta respuesta es incorrecta. No produce 2 ^ n combinaciones como debería.
EDITAR: No sé por qué, pero esta solución es realmente rápida en comparación con la solución perl de @Joeseph R. ¡Ejecuta "Supercalifragilisticexpialidocious" en menos de 0.3 segundos!
Aquí está mi crack:
Ejecutándolo:
Siéntase libre de bifurcarlo y modificarlo, estoy seguro de que puede optimizarse. https://gist.github.com/ryanmjacobs/4c02ad80f833dee0c307
fuente
harley
usted debería tener 64 resultados, ¿dónde estáharLEY
, por ejemplo?Si prefiere usar herramientas listas en lugar de codificación, puede usar TextMechanic (herramienta de generación de permutación / combinación) y Unit-Conversion.info
fuente