OT: grep

Jan Pechanec jp at devnull.cz
Fri Jul 27 17:19:09 CEST 2012


On Fri, 27 Jul 2012, Dan Lukes wrote:

>Jan Pechanec wrote:
>> 	cau Dane, podle me to je chyba. Backslash potlacuje specialni vyznam 
>> znaku za nim, tady neni co potlacit, takze by tam mel nechat ten zpetny 
>> apostrof.
>
>To nedokazu s jistotou rozhodnout. To co rikas je "obvykla
>implementace", ale nemam dojem, ze by to POSIX nebo dokumentace grepu
>ustanovil "standardem" na ktery se da spolehnout.

	hmm, divam se na to do POSIX.1-2008, a je to specifikovany jako 
"undefined" (prijde mi opravdu hodne vtipny, ze tam maji '\\', to je jako by 
ho v textu chybne escapovali pro dany vystup).

9.3.2 BRE Ordinary Characters
<...>
The interpretation of an ordinary character preceded by a <backslash> ( '\\' 
) is undefined, except for:

    The characters ')' , '(' , '{' , and '}'

    The digits 1 to 9 inclusive (see BREs Matching Multiple Characters )

    A character inside a bracket expression

<...>
9.4.2 ERE Ordinary Characters

An ordinary character is an ERE that matches itself. An ordinary character 
is any character in the supported character set, except for the ERE special 
characters listed in ERE Special Characters . The interpretation of an 
ordinary character preceded by a <backslash> ( '\\' ) is undefined.


	takze evidentne se dany grep chova podle specifikace korektne, 
protoze jak u basic, tak u extended neni takovy chovani definovany. Ale 
podle me to neni ocekavany chovani. A to kvuli tomu, ze '\`' a '\X' se 
chovaji ruzne. Proto si myslim, ze to bude bug v kodu, a rovnou rikam, ze 
hledat to tam nebudu :-)

>Mozna to tak mysleli, pak mas pravdu, je to bug, mozna to ma nejakej
>zvlastni specialni vyznam, ktere enni v manualovy strance popsanej (pak
>je chyba v manualovy strance), nebo tim autori mysleli buhvico jinyho ....

	podle POSIXu nema zpetny apostrof v regularnich vyrazech zadnou 
zvlastni funkci, takze spis si myslim, ze mu implementace ani zadnou neda.

<...>
>BSD implementaci FreeBSD uz pred delsim casem zahodilo a misto nej mame
>GNU grep. O duvod vic bejt v soudech opatrnej - je to cizinec, kterej
>neni psanej stejnym stylem jako ostatni veci.

	aha, to jsem nevedel, to pak tento problem dostava trochu jinou 
dimenzi.

<...>
>To je vec jemnych nuanci ve formulaci nazoru ;-)
>
>Ja bych nerekl "takhle se chova i shell" ale "takhle se chova shell" a
>dodal, ze to neznamena, ze se tak bude chovat kazdej program.

	ok, tak to preformuluju tak, ze jsem tohle chovani nikdy nikde 
nezaregistroval, pouze to opacny. Co si vzpominam, tak perlovsky regularni 
vyrazy take umoznuji "\a" a je to jako "a".

>A "backslashem neurazis" mam taky spis za odvazny nez rozumny nazor a
>byl bych opatrnej s jeho (nad)uzivanim tam, kde neni jasne receno, ze to
>tak program ocekava (nebo aspon spravne zvlada).

	nerikam, ze je rozumny ho pouzit, naopak, ja rozhodne myslim, ze je 
dobry vedet, co ma a co nema specialni vyznam, ale pokud mas situaci tohoto 
typu, je nutny se rozhodnout. Chovat se jednou tak a jednou onak je horsi 
nez chovat se konzistentne, i kdyz samozrejme, a to je asi nejhlavnejsi vec, 
jelikoz se bavime o nedefinovanym chovani, clovek je a bude na nejisty pude, 
pokud to takhle pouzije. Takze zaver opravdu je, ze pouziti konstruktu '\`' 
je chyba, coz si psal v minulym mailu.

>Odreportujte a uvidime ...

	souhlasim ;-)

-- 
Jan Pechanec <jp (at) devnull (dot) cz>
http://www.devnull.cz


More information about the Users-l mailing list