2007/9/4, Justin Pryzby <[EMAIL PROTECTED]>:
>
> tag 440813 moreinfo
> thanks
>
> On Tue, Sep 04, 2007 at 04:15:05PM +0300, Petteri Pajunen wrote:
> > Package: grep
> > Version: 2.5.1.ds2-6
> >
> > On my amd64 debian box using locale
> > fi_FI.UTF-8 (all LC_XXX variables set to fi_FI.UTF-8 as well as LANG)
> grep
> > fails to handle character ranges correctly. For example, the first grep
> is
> > wrong but the second works correctly:
> > $ echo "w" | grep "[a-z]"
> > $ echo "a" | grep "[a-z]"
> > a
> Are you sure this is not the normal problem of character ranges not
> being portable except within the C locale?  The common example is that
> [a-z] might actually mean aAbBcCdDeE...z, which is often not what's
> expected, since it both includes capital letters and misses "Z".  I
> don't know what fi locale looks like..


I am quite sure, since other users reported different results on 32-bit
systems, also using 2.5.1ds2-6 and
fi_FI (unless fi_FI differs between i386 and amd64).

I agree that applications should not count on character ranges, but a-z is
probably used in many scripts (that's how I ran into this potential bug).
The finnish alphabetical order is the common one, i.e.
"abcd.....tuvwxyz...". So v and w come after a and before z.

The typical solution is to either use [[:alpha:]] or just use:
|LC_ALL=C grep '...'

I have no problems with this solution, but I would bet that there are lots
of scripts using a-z ranges and not expecting letters such as v and w being
outside of a-z. This can introduce subtle bugs, for example ignoring files
with letters v and w in their name etc..

Petteri

Reply via email to