次のシェルスクリプトがあります
#! /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
言語設定はどこにありますか?