Je veux écrire un script bash pour imprimer toutes les permutations possibles en minuscules et majuscules d'un certain mot, par ex. Harley :
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
Ma solution naïve consiste à écrire une n-ième (n est len(mot)) boucle for imbriquée pour ce mot spécifique :
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
Cependant, je devrais coder à nouveau le script pour un mot différent.
Existe-t-il une meilleure façon d'y parvenir ?
Réponse acceptée :
Une solution légèrement meilleure :
echo {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
Pour une évolutivité totale :
echo harley \
| perl -nle 'print "echo ",
join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c "{}"
Si vous devez absolument avoir un mot par ligne, optez pour
for w in {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y};do echo $w;done
merci pour le commentaire de mattdm
La version évolutive correspondante serait :
echo harley \
| perl -nle 'print join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c 'for w in {};do echo $w;done'
Pour le plaisir, essayez de remplacer "harley" par "supercalifragilisticexpialidocious" Cela fait 5 minutes et mon ordinateur continue de craquer sur celui-ci et ne finira probablement jamais 🙂