Path: utzoo!utgpu!watmath!uunet!tut.cis.ohio-state.edu!comp.vuw.ac.nz!nickson From: nickson@comp.vuw.ac.nz (Ray Nickson) Newsgroups: gnu.bash.bug Subject: bug in globbing Message-ID: <8908080422.AA28612@comp.vuw.ac.nz> Date: 8 Aug 89 04:20:36 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 23 There is a bug in glob.c (bash version 1.02, gcc-compiled, on an hp300 running more/bsd) which causes the following behaviour. Switch to a directory containing only the files A and BC, then do echo *[^C] I (usually) get both files listed. (my understanding is that BC shouldn't be listed). The problem is (not surprisingly) in the glob_match function in glob.c; when matching against *, we try to see how much of our text matches, and make * match enough to make this work. So, we first attempt to match [^C] to BC; this fails because [^C] must match exactly one character. Matching [^C] to C fails, because it cannot match a C. But then, we try to match [^C] against the null string; the code as written will test the first character of the null string ('\0') against each element of the set (i.e. C); it won't match, so we claim that "" matches [^C]. The easiest solution is probably to special-case the null string in text being matched against a set, as we do when matching against ?. -rgn -- Ray Nickson, Dept. Comp. Sci., Victoria University of Wellington, New Zealand. nickson@comp.vuw.ac.nz ...!uunet!vuwcomp!nickson + 64 4 721000x8593