Path: utzoo!utgpu!attcan!uunet!husc6!cmcl2!rutgers!ucsd!ucsdhub!hp-sdd!hplabs!otter!pdc From: pdc@otter.hple.hp.com (Damian Cugley) Newsgroups: comp.unix.questions Subject: Re: CSH Help -- I don't get it ... Message-ID: <1170003@otter.hple.hp.com> Date: 10 Aug 88 16:03:30 GMT References: <9832@eddie.MIT.EDU> Organization: Hewlett-Packard Laboratories, Bristol, UK. Lines: 55 / comp.unix.questions / greim@sbsvax.UUCP (Michael Greim) / Aug 8, 1988 / > < if "$x" =~ "stuff*" echo yes > < alias x 'if "$x" =~ "stuff*" echo yes' > < x > < alias x 'if "$x" =~ "stuff"* echo yes' > < x > < It only prints 'yes' once -- on try three. > It's a bug in csh or at least an undocumented strangeness. It may not be a bug. It *is* consistent with the rest of csh. "..." quoting prevents pattern patching when expanding filenames in commands, so it makes sense for the same to happen when using patterns with =~ or !~. In the first two of his 'if' examples, the * was quoted, i.e. it was no longer 'magical'. In the last one the * is magic and so pattern matching works. The quotes around the $x and the use of 'alias' are all red herrings. > In your first example the string resulting from expanding "$x" has > no 8 bit turned on, but the string "stuff*" has. Thus "*" is not recognized > as a shell meta character. I don't think this makes much sense to me - I wonder what the person asking the question made of it :-( . The * isn't recognised as being magical because it is quoted (i.e. in "..."). Exactly how csh keeps track of what's quoted and what isn't is beside the point. > A fix I made some months ago and posted to the > net took care of this bug, I think. It was listed as <486@sbsvax.UUCP> > from 25.apr.88. But there were still some flaws in pattern matching > which it might even be impossible to straighten out. I don't *think* it's a bug (I don't claim to be an expert). In the man page for csh it says "..." prevents filename expansion, i.e. makes * unmagical. It should've said it made it unmagic in =~ patterns too, but that's a reasonable deduction. Why would it be useful for pattern-matching to work even when quoted? How then would we turn it *off*!? If there's no bug, 'fixing' it will only cause more problems (i.e. introduce more bugs...). > BTW: > Did you ever wonder why 'if "$x" =~ "stuff"*' does not try to do > any filename substitution? The big question is : should it ? No, I didn't wonder. No, it shouldn't. 'If's are special csh keywords, and the test part isn't a command; hence there's no reason whatsoever why it should try to expand patterns into filenames in the test part of an 'if'. -- Damian Cugley 'His feet are the wrong size for his shoes.'