Chci napsat bash skript pro tisk všech možných malých a velkých permutací určitého slova, např. harley:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
Mým naivním řešením je napsat n-tou (n je len(slovo)) vnořenou for-loop pro toto konkrétní slovo:
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
Musel bych však skript znovu nakódovat pro jiné slovo.
Existuje lepší způsob, jak toho dosáhnout?
Přijatá odpověď:
Trochu lepší řešení:
echo {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
Pro plnou škálovatelnost:
echo harley \
| perl -nle 'print "echo ",
join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c "{}"
Pokud absolutně musíte mít jedno slovo na řádek, použijte
for w in {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y};do echo $w;done
díky komentáři mattdm
Odpovídající škálovatelná verze by byla:
echo harley \
| perl -nle 'print join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c 'for w in {};do echo $w;done'
Pro zábavu zkuste nahradit „harley“ za „supercalifragilisticexpialidocious“ Uplynulo 5 minut a můj počítač stále chroupe a pravděpodobně nikdy nedokončí 🙂