harleyなどの特定の単語のすべての可能な小文字と大文字の置換を印刷するbashスクリプトを作成したいと思います。
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
私の素朴な解決策は、この特定の単語に対して入れ子になったforループをn番目(nはlen(word))で書くことでした。
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
ただし、別の単語でスクリプトを再作成する必要があります。
これを達成するより良い方法はありますか?
ベストアンサー1
少し優れたソリューション:
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'
おもしろくして「harley」を次に変えてみてください。「スーパーカリフォルニアの脆弱性Expialidocious」5分経っても、私のコンピュータは作業を続けているため、完了しない可能性があります。 :)