Je veux écrire un script bash pour imprimer toutes les permutations minuscules et majuscules possibles d'un certain mot, par exemple harley:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
Ma solution naïve consiste à écrire un n-ème (n est len (mot)) imbriqué for-loop pour ce mot spécifique:
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
Cependant, je devrais à nouveau coder le script pour un mot différent.
Existe-t-il une meilleure façon d'accomplir cela?
printf '%s\n' {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
printf
sed 's/./{&,&}/g'
transformeraitFoo
en{F,F}{o,o}{o,o}
, ce qui serait assez inutile. Mais ajoutez\U
et\L
et vous obtenez les majuscules et les minuscules de chaque lettre; à savoir{F,f}{O,o}{O,o}
.eval
dire au shell de développer le { X , x séquences d'accolades }.la source
EDIT 2: Cette réponse est fausse. Il ne produit pas 2 ^ n combinaisons comme il se doit.
ÉDITER: Je ne sais pas pourquoi, mais cette solution est vraiment rapide par rapport à la solution perl de @Joeseph R. Elle exécute "Supercalifragilisticexpialidocious" en moins de 0,3 seconde!
Voici ma fissure:
L'exécuter:
N'hésitez pas à le fork et à le modifier, je suis sûr qu'il peut être optimisé. https://gist.github.com/ryanmjacobs/4c02ad80f833dee0c307
la source
harley
vous devriez avoir 64 résultats, où estharLEY
, par exemple?Si vous préférez utiliser des outils prêts à l'emploi au lieu de coder, vous pouvez utiliser TextMechanic (outil générateur de permutation / combinaison) et Unit-Conversion.info
la source