From owner-freebsd-current@freebsd.org Fri Apr 7 06:06:49 2017 Return-Path: Delivered-To: freebsd-current@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F247CD32C69 for ; Fri, 7 Apr 2017 06:06:48 +0000 (UTC) (envelope-from rizzo@i805.com.br) Received: from server.i805.com.br (mailhost.i805.com.br [50.7.9.75]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "fbsd10.amd64", Issuer "fbsd10.amd64" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id C75115F5 for ; Fri, 7 Apr 2017 06:06:47 +0000 (UTC) (envelope-from rizzo@i805.com.br) Received: from server.i805.com.br (localhost [127.0.0.1]) by server.i805.com.br (8.15.2/8.15.2) with ESMTPS id v3766YTQ014961 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Fri, 7 Apr 2017 03:06:35 -0300 (BRT) (envelope-from rizzo@i805.com.br) Received: (from www@localhost) by server.i805.com.br (8.15.2/8.15.2/Submit) id v3766XeE014959; Fri, 7 Apr 2017 03:06:34 -0300 (BRT) (envelope-from rizzo@i805.com.br) X-Authentication-Warning: server.i805.com.br: www set sender to rizzo@i805.com.br using -f To: Garrett Wollman Subject: Re: problem with ls, not show a correct list X-PHP-Script: www.i805.com.br/roundcube/index.php for 186.221.219.53 X-PHP-Originating-Script: 80:rcube.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Fri, 07 Apr 2017 03:06:33 -0300 From: =?UTF-8?Q?Nilton_Jos=C3=A9_Rizzo?= Cc: freebsd-current@freebsd.org In-Reply-To: <201704070529.v375T5ux031766@hergotha.csail.mit.edu> References: <3a8b8ade882d1486aa41b448a9c83b6c@i805.com.br> <201704070529.v375T5ux031766@hergotha.csail.mit.edu> Message-ID: X-Sender: rizzo@i805.com.br User-Agent: Roundcube Webmail/1.2.3 X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on server.i805.com.br X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 Apr 2017 06:06:49 -0000 Em 2017-04-07 02:29, Garrett Wollman escreveu: > In article <3a8b8ade882d1486aa41b448a9c83b6c@i805.com.br> you write: >> >> >> It's a terrible!!!! Is it a locale bug? Look! >> >> % locale >> LANG=pt_BR.UTF-8 >> % touch E >> % ls -l [a-z]* >> -rw-r--r-- 1 rizzo wheel 0 7 abr 02:06 E > > No, it's the specification of how character ranges in glob(3) and > fnmatch(3) work. In effect, character ranges like [a-z] must be > treated as ranges of *collating elements*, not byte ranges, and in > your locale, and are considered to be the same collating > element, so [a-z] matches both upper- and lower-case Latin letters. > This is documented, very obliquely, in sh(1), which also tells you the > workaround: > > a character class. A character class matches any of the > characters > between the square brackets. A locale-dependent range of > characters may > be specified using a minus sign. A named class of characters (see > wctype(3)) may be specified by surrounding the name with `[:' and > `:]'. > For example, `[[:alpha:]]' is a shell pattern that matches a > single let- > ter. > > So, to match only lower-case letters regardless of your current locale > setting, you must use the correct character class: > > $ locale > LANG=pt_BR.UTF-8 > LC_CTYPE="pt_BR.UTF-8" > LC_COLLATE="pt_BR.UTF-8" > LC_TIME="pt_BR.UTF-8" > LC_NUMERIC="pt_BR.UTF-8" > LC_MONETARY="pt_BR.UTF-8" > LC_MESSAGES="pt_BR.UTF-8" > LC_ALL= > $ ls > D E F a b c > $ ls [[:lower:]]* > a b c > > The same applies to character class ranges in regular expressions, not > just glob(3) patterns. > > -GAWollman It's only work in SH, in C shell (or tcsh) not work and it's not work if I need to do this: I think this not correct. % setenv LANG C % echo "Using C " && ls && echo "---" && ls [a-c,k-m]* Using C A a d g j m p s v y D b e h k n q t w z E c f i l o r u x --- a b c k l m % setenv LANG pt_BR.UTF-8 % echo "Using pt_BR.UTF-8" && ls && echo "---" && ls [a-c,k-m]* Using pt_BR.UTF-8 a c e g j m p s v y A d E h k n q t w z b D f i l o r u x --- a A b c k l m % sh $ ls [a-c,k-l]* a A b c k l $ ls [[:lower:]a-c,k-l]* a c f i l o r u x A d g j m p s v y b e h k n q t w z If I'll use the rm command I'll erase file that not match with my selection. Imagine if I has a script to work in batch mode and it's occur, can be a too dangerous. -- ******************************************************** * Nilton José Rizzo Sistema de Informação UFRRJ * * http://cursos.ufrrj.br/grad/sistemas/ * * lattes:http://lattes.cnpq.br/0079460703536198 * ********************************************************