Відповісти

Увага: ця гілка була неактивною принаймні 365 днів!
Будь ласка, подумайте про створення нової гілки, якщо ви не впевнені абсолютно, що хочете відновити обговорення тут.
Ім’я:
Електронна пошта:
Тема:
Іконка:

Код перевірки:
Будь ласка, введіть символи, вказані на малюнку
прослухати / Спробувати інший малюнок

Будь ласка, введіть символи, вказані на малюнку:

скорочення: alt+s — надіслати допис, alt+p — попередній перегляд


Стислий вміст гілки

Автор: root_x
« : 2007-04-19 15:37:40 »

ну Ви ваще  :o
Автор: Михайло Даниленко
« : 2007-03-29 21:45:49 »

Дякую!
:#)
Автор: Forum admin
« : 2007-03-28 22:23:25 »

Ага!
Цитата
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)
Отже, для української локалі маємо якраз останній випадок.

Приз, в студію! [smiley=10.gif]

Шкода що в ЩОДО не можна дати якусь відзнаку користувачу. :-(


Виявляється що можна.
Отже урочисто (майже  :) ) нагороджується Михайло Даниленко за бла бла  бла.  [smiley=beer.gif]
Автор: Володимир Лісівка
« : 2007-02-13 16:22:48 »

Дивовижне поряд...

Я тут дойшов до дому і спробував наступне:

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 не встановлено)


А в мене чомусь тільки A віднесло до верхнього регістру. ;-)

for i in {A..z} ; do  case "$i" in   [a-z]) echo "Lower $i";;   [A-Z]) echo "Upper $i";;   *) echo "None $i";;    esac; done
Upper A
Lower B
Lower C
Lower D
Lower E
Lower F
Lower G
Lower H
Lower I
Lower J
Lower K
Lower L
Lower M
Lower N
Lower O
Lower P
Lower Q
Lower R
Lower S
Lower T
Lower U
Lower V
Lower W
Lower X
Lower Y
Lower Z
None [
NoneNone ]
None ^
None _
None `
Lower a
Lower b
Lower c
Lower d
Lower e
Lower f
Lower g
Lower h
Lower i
Lower j
Lower k
Lower l
Lower m
Lower n
Lower o
Lower p
Lower q
Lower r
Lower s
Lower t
Lower u
Lower v
Lower w
Lower x
Lower y
Lower z
Автор: Володимир Лісівка
« : 2007-02-13 16:18:25 »

[A-Z] - реагує на будь-яку велику латинську літеру, тому правильно не зреагувало на "а". Чи я щось не помітив?

Доречі, в прикладі `echo q ...` можна замінити на просто q w ...,

Можна, але я хотів щоб воно було посортовано (і цей варіант вимагав найменше зусиль).

Цитата
а у третьому баші на {A--z} або {A..z}.
Ну взагалі-то має бути {A..Z} {a..z}. Я боявся що воно може дати "парну помилку" і може не у всіх спрацювати.
Автор: Володимир Лісівка
« : 2007-02-13 16:12:50 »

Ага!
Цитата
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)
Отже, для української локалі маємо якраз останній випадок.

Приз, в студію! [smiley=10.gif]

Шкода що в ЩОДО не можна дати якусь відзнаку користувачу. :-(

Автор: zzandy
« : 2007-02-12 21:06:32 »

Вибачте, я там попер проти істини. В мене теж  при LC_ALL='' тільки Z вважається верхнім регістром, а при LC_ALL="C" вже пращює як треба.
Автор: Михайло Даниленко
« : 2007-02-12 20:57:47 »

[isbear: ~] locale
LANG=uk_UA.UTF-8
LC_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 i
OK: A
OK: B
OK: C
OK: D
OK: E
OK: F
OK: G
OK: H
OK: I
OK: J
OK: K
OK: L
OK: M
OK: N
OK: O
OK: P
OK: Q
OK: R
OK: S
OK: T
OK: U
OK: V
OK: W
OK: X
OK: Y
BAD: Z
OK: a
OK: b
OK: c
OK: d
OK: e
OK: f
OK: g
OK: h
OK: i
OK: j
OK: k
OK: l
OK: m
OK: n
OK: o
OK: p
OK: q
OK: r
OK: s
OK: t
OK: u
OK: v
OK: w
OK: x
OK: y
OK: z
Автор: zzandy
« : 2007-02-12 20:37:11 »

Дивовижне поряд...

Я тут дойшов до дому і спробував наступне:

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 не встановлено)

Автор: Михайло Даниленко
« : 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)
Отже, для української локалі маємо якраз останній випадок.
Автор: Михайло Даниленко
« : 2007-02-12 19:24:17 »

А взагалі, краще користуватися:
for I in {A..Z} {a..z} ; do
        case "${I}" in
        ([[:upper:]])
                echo "OK: ${I}"
                ;;
        (*)
                echo "BAD: ${I}"
                ;;
        esac
done
Тоді все працює в будь-якій локалі.
Автор: Михайло Даниленко
« : 2007-02-12 18:20:20 »

Якщо перед виконанням зробить
export LC_ALL="C"
То воно буде себе вести цілком логічно. Як я розумію, проблема в тому, що воно сортує символи у відповідності до поточної локалі... Але воно видає OK на маленькі літери і коли локаль uk_UA.UTF-8 і коли uk_UA.KOI8-U, отже сортування іде взагалі по unicode mappings?
Автор: Praporshic
« : 2007-02-12 17:54:25 »

Так, не помітили. Воно мені сказало OK на усі інші літери. Як на малі, так і на великі.
Автор: zzandy
« : 2007-02-12 15:35:59 »

[A-Z] - реагує на будь-яку велику латинську літеру, тому правильно не зреагувало на "а". Чи я щось не помітив?

Доречі, в прикладі `echo q ...` можна замінити на просто q w ..., а у третьому баші на {A--z} або {A..z}.
Автор: Praporshic
« : 2007-02-12 14:14:29 »

Таки не вірно пам'ятаю.
Воно видало BAD на "a". Подивився у REGEXP reference і зрозумів що тут не pcre.