特定の単語の可能なすべての小文字と大文字の順列を出力するbashスクリプトを記述したいと思います。ハーレー:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
私の素朴な解決策は、この特定の単語に対してn番目(nはlen(word))のネストされたforループを記述することです:
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
ただし、別の単語のスクリプトを再度コーディングする必要があります。
これを達成するためのより良い方法はありますか?
承認された回答:
少し良い解決策:
echo {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
完全なスケーラビリティの場合:
echo harley \
| perl -nle 'print "echo ",
join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c "{}"
どうしても1行に1語必要な場合は、
を使用してください。for w in {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y};do echo $w;done
mattdmのコメントに感謝します
対応するスケーラブルバージョンは次のようになります:
echo harley \
| perl -nle 'print join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c 'for w in {};do echo $w;done'
楽しみのために、「ハーレー」を「supercalifragilisticexpialidocious」に置き換えてみてください。5分経ちましたが、私のコンピューターはまだこれを処理し続けており、おそらく終了することはありません🙂