シェルスクリプトのCaseステートメントは大文字を認識できません。

シェルスクリプトのCaseステートメントは大文字を認識できません。

次のシェルスクリプトがあります

#! /bin/bash

echo -e "Enter any character: \c"
read value

case $value in
    [a-z] )
        echo You have entered a lower case alphabet;;
    [A-Z] )
        echo You have entered an upper case alphabet;;
    [0-9] )
        echo You have entered a number;;
    [?] )
        echo You have entered a special character;;
    [*] )
        echo Unknown value;;
esac

ここに大文字を入力すると

K

私は出力を得る

You have entered a lower case alphabet

それを修正する方法?

答え1

これと組み合わせるスチールドライバー照合順序リンクの場合、解決策はで定義されているコレクションを使用することですman tr

[[しかもvsの良い参考資料でもあります。[ ウレッチ, グローブスそして、以下のコードはまだ失敗し、[

  1 #! /bin/bash
  2 
  3 echo -e "Enter any character: \c"
  4 read -rN 1 value
  5 echo
  6 
  7 case $value in
  8     [[:lower:]] )
  9         echo You have entered a lower case alphabet;;
 10     [[:upper:]] )
 11         echo You have entered an upper case alphabet;;
 12     [[:digit:]] )
 13         echo You have entered a number;;
 14     [?] )
 15         echo You have entered a special character;;
 16     [*] )
 17         echo Unknown value;;
 18 esac

上記のウールリンクから:

範囲

Glob 文字の範囲またはカテゴリは、角かっこを使用して指定できます。これにより、文字セットを一致させることができます。たとえば、

[abcd]はa、b、c、dと一致します。

[ad] globasciirangesが設定されている場合、またはロケールがCまたはPOSIXの場合は上記と同じです。それ以外の場合、実装が定義されます。

[!aeiouAEIOU]は、a、e、i、o、u、および対応する大文字を除くすべての文字と一致します。

[[:alnum:]]は、現在のロケールのすべての英数字(文字または数字)と一致します。

[[:space:]] 空白文字と一致します。

[![:space:]] 空白以外のすべての文字と一致します。

[[:digit:]_.] は任意の数字と一致します。 or_ or.

グローバシレンジに関する情報:バッシュリファレンスマニュアル

答え2

LANGこれは次のように設定する必要があります。C

端子タイプ

LANG=C

環境LANG変数は、言語/地域とエンコーディングを表します。C言語設定はどこにありますか?

関連情報