Ich möchte ein Bash-Skript schreiben, um alle möglichen Klein- und Großbuchstaben-Permutationen eines bestimmten Wortes zu drucken, z. Harley:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
Meine naive Lösung besteht darin, eine n-te (n ist len(Wort)) verschachtelte for-Schleife für dieses bestimmte 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 für ein anderes Wort erneut codieren.
Gibt es einen besseren Weg, dies zu erreichen?
Akzeptierte Antwort:
Eine etwas bessere Lösung:
echo {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
Für volle Skalierbarkeit:
echo harley \
| perl -nle 'print "echo ",
join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c "{}"
Wenn Sie unbedingt ein Wort pro Zeile haben müssen, wählen Sie
for w in {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y};do echo $w;done
danke an den Kommentar von mattdm
Die entsprechende skalierbare Version wäre:
echo harley \
| perl -nle 'print join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c 'for w in {};do echo $w;done'
Versuchen Sie zum Spaß, „harley“ durch „supercalifragilisticexpialidocious“ zu ersetzen. Es sind 5 Minuten vergangen, und mein Computer knirscht immer noch und wird wahrscheinlich nie fertig werden 🙂