[linux] Re: wtf... regular expressions in awk...

Robert M. Stockmann stock op stokkie.net
Wo Sep 28 05:54:45 CEST 2005


On Wed, 28 Sep 2005, Kees Theunissen wrote:

> On Tue, 27 Sep 2005, Kees Theunissen wrote:
> 
> >Ter vergelijking dezelfde opdrachten als $LANG niet geset is.
> >De sorteer volgorde van "ls" en "sort" wordt eerst alle uppercase
> >namen, daarna pas lowercase.
> >
> >[kees op ithmar test]$ unset LANG
> >[kees op ithmar test]$ ls
> >AA  BB  CC  DD  aa  bb  cc  dd
> >[kees op ithmar test]$ ls |sort
> >AA
> >BB
> >CC
> >DD
> >aa
> >bb
> >cc
> >dd
> >
> >Bij de pathname expansion van "ls [A-C]*" in bash verandert wel de
> >volgorde van de output, maar "bb" en "cc" blijven in de expansie zitten.
> >Vraag me niet waarom. Is dit een compile time default of zie ik een
> >optie over het hoofd?
> >
> >[kees op ithmar test]$ ls [A-C]*
> >AA  BB  CC  bb  cc
> 
> Ik heb nog wat geëxperimenteerd en kom tot de conclusie dat dit gedrag
> van bash op een bug wijst. In een paar zinnen samengevat komt dat gedrag
> neer op het volgende:
> 
> 1) Als bash wordt gestart in een environment waarin $LANG, $LC_ALL en/of
> $LC_COLLATE zijn gedefiniëerd en als die variabelen vervolgens 'unset'
> worden, dan zal de filename expansie van bijvoorbeeld [A-C]* worden
> gesorteerd volgens de "C" oftewel de "POSIX" locale. Dat is ook wat je
> verwacht. Maar de INHOUD van die expansie zal overeenkomstig de locale
> zijn die gold bij het starten van bash. Ik heb het hier dus over een
> situatie waarin $LANG $LC_ALL en/of $LC_COLLATE aanvankelijk waren
> geset maar uiteindelijk 'unset' werden. Of er tussendoor met die
> variabelen werd gerommeld (interactief of in een opstart-script) lijkt
> niets uit te maken.
> 
> 2) Als bash wordt gestart in een environment waarin $LANG, $LC_ALL en/of
> $LC_COLLATE allen niet zijn gedefiniëerd en als één of meer van die
> variabelen eventueel worden geset maar dan naderhand ook weer worden
> 'unset', dan zal de filename expansie van bijvoorbeeld [A-C]* zich
> gedragen zoals je verwacht: volgens de "C" oftewel de "POSIX" locale.
> Dat geldt zowel voor de inhoud van de expansion als voor de
> sorteervolgorde.
> 
> Ik beschouw het gedrag zoals beschreven onder 1) als een bug. Kan
> iemand dat gedrag bevestigen?
> 

Jazeker, je hebt helemaal gelijk :

Mandrake 10.1 :
------------------------------------------------------------------------
[jackson:stock]:(~)$ cd test
[jackson:stock]:(~/test)$ ls [A-Z]*
AA  bb  BB  cc  CC  dd  DD
[jackson:stock]:(~/test)$ unset LANG 
[jackson:stock]:(~/test)$ unset LC_ALL
[jackson:stock]:(~/test)$ unset LC_COLLATE
[jackson:stock]:(~/test)$ bash
[jackson:stock]:(~/test)$ echo $LANG

[jackson:stock]:(~/test)$ ls [A-Z]*
AA  BB  CC  DD
[jackson:stock]:(~/test)$ exit
exit
[jackson:stock]:(~/test)$ echo $LANG

[jackson:stock]:(~/test)$ ls [A-Z]*
AA  BB  CC  DD  bb  cc  dd
[jackson:stock]:(~/test)$ echo $BASH_VERSION
2.05b.0(1)-release
[jackson:stock]:(~/test)$ cat /etc/redhat-release 
Mandrakelinux release 10.1 (Official) for x86_64
[jackson:stock]:(~/test)$ 
------------------------------------------------------------------------


Hier Mandriva 10.2 :
------------------------------------------------------------------------
[tapebox:stock]:(~)$ mkdir test ; cd test ; touch AA BB CC DD aa bb cc dd
[tapebox:stock]:(~/test)$ ls [A-Z]*
AA  bb  BB  cc  CC  dd  DD
[tapebox:stock]:(~/test)$ unset LANG
[tapebox:stock]:(~/test)$ unset LC_ALL
[tapebox:stock]:(~/test)$ unset LC_COLLATE
[tapebox:stock]:(~/test)$ bash
[tapebox:stock]:(~/test)$ ls [A-Z]*
AA  BB  CC  DD
[tapebox:stock]:(~/test)$ exit
exit
[tapebox:stock]:(~/test)$ echo $LANG

[tapebox:stock]:(~/test)$ ls [A-Z]*
AA  BB  CC  DD
[tapebox:stock]:(~/test)$ echo $BASH_VERSION
3.00.16(2)-release
[tapebox:stock]:(~/test)$ cat /etc/redhat-release 
Mandrakelinux release 10.2 (Limited Edition 2005) for i586
[tapebox:stock]:(~/test)$ 
------------------------------------------------------------------------

bash 3.00.xx lijkt dus weer wel ok... Ik denk dat het om een bug
gaat in de 2.05b.0(1)-release. Niet geheel onbelangrijk.

Bedankt voor het pluis-werk :)

Vr.gr.

Robert
-- 
Robert M. Stockmann - RHCE
Network Engineer - UNIX/Linux Specialist
crashrecovery.org  stock op stokkie.net




More information about the Linux mailing list