2

bashで、文がパングラムかどうかをテストしようとしています。

read sentence
if [[ "$sentence" == [Aa] && [Bb] && [Cc] && [Dd] && [Ee] && [Ff] && [Gg] && [Hh] && [Ii] && [Jj] && [Kk] && [Ll] && [Mm] && [Nn] && [Oo] && [Pp] && [Qq] && [Rr] && [Ss] && [Tt] && [Uu] && [Vv] && [Ww] && [Xx] && [Yy] && [Zz] ]]; then
echo "pangram"
else
echo "not pangram"
fi

これは私がこれまでに持っているコードであり、私が得ているのはの出力だけです"not pangram"。私のコードの何が問題なのか誰か知っていますか?

以前の質問のコードを操作しようとしていました。

4

3 に答える 3

2

パングラムをテストするより優れた純粋な Bash の方法は次のようになります (関数として記述)。

is_pangram() {
    local l=${1,,} i
    for i in {a..z}; do
        [[ $l = *$i* ]] || return 1
    done
    return 0
}

この関数は、最初に引数を小文字に変換します。 の展開は、小文字${1,,}$1変換された の展開です。この値をローカル変数に保存しますl。次に、with (小文字のアルファベット) をループしfor i in {a..z}、glob を使用して (この場合はやり過ぎになる正規表現の代わりに) $l、文字が含まれているかどうかを確認します。

次に試してみてください:

$ if is_pangram "Cwm fjord bank glyphs vext quiz"; then echo "it's a pangram"; else echo "not a pangram"; fi
it's a pangram
$ if is_pangram "the horse jumps over the fence"; then echo "it's a pangram"; else echo "not a pangram"; fi
not a pangram
于 2014-10-21T08:06:52.867 に答える