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}printfeval echo $ (echo " palabra " | sed 's /./ {\ U &, \ L &} / g')sed 's/./{&,&}/g'se convertiríaFooen{F,F}{o,o}{o,o}, lo que sería bastante inútil. Pero agregue\Uy\Lobtendrá la mayúscula y minúscula de cada letra; es decir,{F,f}{O,o}{O,o}.evalpara 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
harleyusted 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