bash LC_COLLATE or LC_ALL set “C” not sort in dictionary order.

Edward Martinez eam1edward at gmail.com
Tue Jan 31 19:01:22 UTC 2012


On 01/31/12 06:31, Robert Bonomi wrote:
>>  From owner-freebsd-questions at freebsd.org  Tue Jan 31 05:45:47 2012
>> Date: Tue, 31 Jan 2012 04:45:36 -0800
>> From: Edward Martinez<eam1edward at gmail.com>
>> To: FreeBSD Questions<freebsd-questions at freebsd.org>
>> Subject: bash  LC_COLLATE or LC_ALL set =?windows-1252?q?=93C=94_not__sort?=
>>   =?windows-1252?q?_in_dictionary_order=2E?=
>>
>>
>>
>>
>>       Hi,
>>
>>       Been trying to get BASH to sort set characters in  dictionary order.
>>      I typed "locale" and it shows LC_COLLATE and LC_ALL are set to "C"
>> thought that was enough to work,
>>      however when i type metacharacters:  set character; any character,
>> something like this:
>>
>>          ls  [a-cx-y]*
>>
>>       bash does not sort in dictionary order; file   "Binarc" does not
>> list.
>>
> *OF*COURSE* it doesn't.  Unix is _case_sensitive_.  You specified a lower-
> case only (in the C locale) pattern.  Naturally, it doesn't match a file
> with an upper-case character in it.
>
> Note: in the 'C' locale, characters are sorted on the underlying byte value.
> Thus you will get all the upper-case matches before any lower-case match.
>
> To get upper-and-lower case files in the C locale, you will have to use:
>            ls [A-CX-Ya-cx-y]*
>
> IF you speciy a different charset for collating, you _may_ get upper/lower
> case characters sorted adjacently.  See the specifications for the charset
> in question.
>
>
     Thanks for reply!

      I meant LC_COLLATE being  set to en_US.UTF-8 not C.  linux and 
solaris  shows both  upper and lowercase when set characters like 
[a-cx-y] and others   are used. when LC_COLLATE is set to  en_US.UTF-8.
      I thought it could be also done in FreeBSD's  bash  when   
LC_COLLATE  is  set to en_US.UTF-8

     in linux LC_COLLATE is set to en_US,UTF-8
     eam at localhost ~/testdir $ locale
     LANG=
     LC_CTYPE="POSIX"
     LC_NUMERIC="POSIX"
     LC_TIME="POSIX"
*LC_COLLATE=en_US.UTF-8*
     LC_MONETARY="POSIX"
     LC_MESSAGES="POSIX"
     LC_PAPER="POSIX"
     LC_NAME="POSIX"
     LC_ADDRESS="POSIX"
     LC_TELEPHONE="POSIX"
     LC_MEASUREMENT="POSIX"
     LC_IDENTIFICATION="POSIX"
     LC_ALL=


     And when i type the following it shows both:

     eam at localhost ~/testdir $ ls [a-cx-y]*
     bincar  Bincar

     eam at localhost ~/testdir $ ls [a-z]*
     bincar  Bincar  file  File  zcar











More information about the freebsd-questions mailing list