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