Ich möchte ein Bash-Skript schreiben, um alle möglichen Klein- und Großbuchstaben eines bestimmten Wortes zu drucken, zB harley:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
Meine naive Lösung besteht darin, eine n-te (n ist len (word)) verschachtelte for-Schleife für dieses spezielle Wort zu schreiben:
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
Allerdings müsste ich das Skript erneut für ein anderes Wort codieren.
Gibt es einen besseren Weg, um dies zu erreichen?
printf '%s\n' {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
printf
sed 's/./{&,&}/g'
würde sichFoo
in{F,F}{o,o}{o,o}
, was ziemlich sinnlos wäre. Aber füge hinzu\U
und\L
und du erhältst die Groß- und Kleinschreibung jedes Buchstabens; dh{F,f}{O,o}{O,o}
.eval
, der Shell mitzuteilen, dass sie die { X , x } -Klammersequenzen erweitern soll.quelle
EDIT 2: Diese Antwort ist falsch. Es werden nicht wie erwartet 2 ^ n Kombinationen erzeugt.
EDIT: Ich weiß nicht warum, aber diese Lösung ist wirklich schnell im Vergleich zu der Perl-Lösung von @Joeseph R. Es läuft "Supercalifragilisticexpialidocious" in weniger als 0,3 Sekunden!
Hier ist mein Knaller:
Laufen es:
Fühlen Sie sich frei, es zu gabeln und zu modifizieren, ich bin sicher, dass es optimiert werden kann. https://gist.github.com/ryanmjacobs/4c02ad80f833dee0c307
quelle
harley
64 Ergebnissen solltest du, wo istharLEY
zum Beispiel?Wenn Sie fertige Tools anstelle von Codierung verwenden möchten, können Sie TextMechanic (Permutations- / Kombinationsgenerator-Tool) und Unit-Conversion.info verwenden
quelle