for I in `echo q w e r t y u i o p a s d f g h j k l z x c v b n m Q W E R T Y U I O P A S D F G H J K L Z X C V B N M| tr ' ' '\n'| sort` ; do case $I in [A-Z]) echo "OK: $I"; ;; *) echo "BAD: $I"; ;; esac; done
Ось код на баші:Код: [Вибрати]for I in `echo q w e r t y u i o p a s d f g h j k l z x c v b n m Q W E R T Y U I O P A S D F G H J K L Z X C V B N M| tr ' ' '\n'| sort` ; do case $I in [A-Z]) echo "OK: $I"; ;; *) echo "BAD: $I"; ;; esac; doneХто мені скаже, коли які символи будуть OK чи BAD і чому? :-)
export LC_ALL="C"
for I in {A..Z} {a..z} ; do case "${I}" in ([[:upper:]]) echo "OK: ${I}" ;; (*) echo "BAD: ${I}" ;; esacdone
The sorting order of characters in range expressions is determined by the current locale and the value of the LC_COLLATE shell variable, if set. For example, in the default C locale, ‘[a-dx-z]’ is equivalent to ‘[abcdxyz]’. Many locales sort characters in dictionary order, and in these locales ‘[a-dx-z]’ is typically not equivalent to ‘[abcdxyz]’; it might be equivalent to ‘[aBbCcDdxXyYz]’, for example.
for i in {A..z} do case $i in [a-z]) echo "Lower $i";; [A-Z]) echo "Upper $i";; *) echo "None $i";; esacdone
[isbear: ~] localeLANG=uk_UA.UTF-8LC_CTYPE="uk_UA.UTF-8"LC_NUMERIC="uk_UA.UTF-8"LC_TIME="uk_UA.UTF-8"LC_COLLATE="uk_UA.UTF-8"LC_MONETARY="uk_UA.UTF-8"LC_MESSAGES="uk_UA.UTF-8"LC_PAPER="uk_UA.UTF-8"LC_NAME="uk_UA.UTF-8"LC_ADDRESS="uk_UA.UTF-8"LC_TELEPHONE="uk_UA.UTF-8"LC_MEASUREMENT="uk_UA.UTF-8"LC_IDENTIFICATION="uk_UA.UTF-8"LC_ALL=[isbear: ~] for i in {A..Z} {a..z} ; do case "${i}" in ([a-z]) echo "OK: ${i}" ;; ([A-Z]) echo "BAD: ${i}" ;; (*) echo "NA: ${i}" ;; esac done ; unset -v iOK: AOK: BOK: COK: DOK: EOK: FOK: GOK: HOK: IOK: JOK: KOK: LOK: MOK: NOK: OOK: POK: QOK: ROK: SOK: TOK: UOK: VOK: WOK: XOK: YBAD: ZOK: aOK: bOK: cOK: dOK: eOK: fOK: gOK: hOK: iOK: jOK: kOK: lOK: mOK: nOK: oOK: pOK: qOK: rOK: sOK: tOK: uOK: vOK: wOK: xOK: yOK: z
Ага!ЦитатаThe sorting order of characters in range expressions is determined by the current locale and the value of the LC_COLLATE shell variable, if set. For example, in the default C locale, ‘[a-dx-z]’ is equivalent to ‘[abcdxyz]’. Many locales sort characters in dictionary order, and in these locales ‘[a-dx-z]’ is typically not equivalent to ‘[abcdxyz]’; it might be equivalent to ‘[aBbCcDdxXyYz]’, for example.(http://www.network-theory.co.uk/docs/bashref/PatternMatching.html)Отже, для української локалі маємо якраз останній випадок.
[A-Z] - реагує на будь-яку велику латинську літеру, тому правильно не зреагувало на "а". Чи я щось не помітив?Доречі, в прикладі `echo q ...` можна замінити на просто q w ...,
а у третьому баші на {A--z} або {A..z}.
Дивовижне поряд... Я тут дойшов до дому і спробував наступне:Код: [Вибрати]for i in {A..z} ; do ; case $i in [a-z]) echo "Lower $i";; [A-Z]) echo "Upper $i";; *) echo "None $i";; esac; doneІ воно виводить саме те, що і можна подумати - маленькі літери до маленьких, великі - до великих, а все інше окремо. (Локаль uk_UA.UTF-8, LC_ALL не встановлено)
for i in {A..z} ; do ; case $i in [a-z]) echo "Lower $i";; [A-Z]) echo "Upper $i";; *) echo "None $i";; esac; done
for i in {A..z} ; do case "$i" in [a-z]) echo "Lower $i";; [A-Z]) echo "Upper $i";; *) echo "None $i";; esac; doneUpper ALower BLower CLower DLower ELower FLower GLower HLower ILower JLower KLower LLower MLower NLower OLower PLower QLower RLower SLower TLower ULower VLower WLower XLower YLower ZNone [NoneNone ]None ^None _None `Lower aLower bLower cLower dLower eLower fLower gLower hLower iLower jLower kLower lLower mLower nLower oLower pLower qLower rLower sLower tLower uLower vLower wLower xLower yLower z
Цитата: Михайло Даниленко від 2007-02-12 19:35:48Ага!ЦитатаThe sorting order of characters in range expressions is determined by the current locale and the value of the LC_COLLATE shell variable, if set. For example, in the default C locale, ‘[a-dx-z]’ is equivalent to ‘[abcdxyz]’. Many locales sort characters in dictionary order, and in these locales ‘[a-dx-z]’ is typically not equivalent to ‘[abcdxyz]’; it might be equivalent to ‘[aBbCcDdxXyYz]’, for example.(http://www.network-theory.co.uk/docs/bashref/PatternMatching.html)Отже, для української локалі маємо якраз останній випадок.Приз, в студію! Шкода що в ЩОДО не можна дати якусь відзнаку користувачу. :-(