Chcę napisać skrypt bash, aby wydrukować wszystkie możliwe kombinacje małych i wielkich liter danego słowa, np. Harley:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
Moim naiwnym rozwiązaniem jest napisanie n-tej (n to len (słowo)) zagnieżdżonej pętli for dla tego konkretnego słowa:
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
Jednak musiałbym ponownie zakodować skrypt dla innego słowa.
Czy istnieje lepszy sposób na osiągnięcie tego?
printf '%s\n' {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
printf
sed 's/./{&,&}/g'
zamieniłoby sięFoo
w{F,F}{o,o}{o,o}
, co byłoby całkiem bezużyteczne. Ale dodaj\U
i\L
otrzymasz wielką i małą literę każdej litery; tj{F,f}{O,o}{O,o}
.eval
aby powiedzieć powłoce, aby rozszerzyła sekwencje nawiasów { X , x }.źródło
EDYCJA 2: Ta odpowiedź jest błędna. Nie tworzy 2 ^ n kombinacji tak jak powinno.
EDYCJA: Nie wiem dlaczego, ale to rozwiązanie jest naprawdę szybkie w porównaniu z rozwiązaniem Perla autorstwa @Joesepha R. Uruchamia „Supercalifragilisticexpialidocious” w mniej niż 0,3 sekundy!
Oto mój crack:
Uruchamianie:
Możesz go rozwidlać i modyfikować, jestem pewien, że można go zoptymalizować. https://gist.github.com/ryanmjacobs/4c02ad80f833dee0c307
źródło
harley
was powinien mieć 64 wyników, gdzie jestharLEY
, na przykład?Jeśli wolisz używać gotowych narzędzi zamiast kodowania, możesz użyć TextMechanic (narzędzie do generowania permutacji / kombinacji) i Unit-Conversion.info
źródło