単語の可能なすべての小文字/大文字の組み合わせを取得します。

単語の可能なすべての小文字/大文字の組み合わせを取得します。

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分経っても、私のコンピュータは作業を続けているため、完了しない可能性があります。 :)

おすすめ記事