Voglio scrivere uno script bash per stampare tutte le possibili permutazioni minuscole e maiuscole di una determinata parola, ad es. harley:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
La mia soluzione ingenua è scrivere un ciclo for n-esimo (n è len(word)) annidato per questa parola specifica:
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
Tuttavia, dovrei codificare di nuovo lo script per una parola diversa.
C'è un modo migliore per farlo?
Risposta accettata:
Una soluzione leggermente migliore:
echo {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
Per la piena scalabilità:
echo harley \
| perl -nle 'print "echo ",
join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c "{}"
Se devi assolutamente avere una parola per riga, vai con
for w in {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y};do echo $w;done
grazie al commento di mattdm
La versione scalabile corrispondente sarebbe:
echo harley \
| perl -nle 'print join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c 'for w in {};do echo $w;done'
Per divertimento, prova a sostituire "harley" con "supercalifragilisticexpialidocious" Sono passati 5 minuti e il mio computer sta ancora scricchiolando su questo e probabilmente non finirà mai 🙂