Path: utzoo!utgpu!water!watmath!clyde!att!rutgers!cmcl2!husc6!bbn!uwmcsd1!marque!uunet!mcvax!unido!sbsvax!greim From: greim@sbsvax.UUCP (Michael Greim) Newsgroups: comp.unix.questions Subject: Re: csh (was : CSH Help -- I don't get it ...) Summary: some remarks on csh Message-ID: <601@sbsvax.UUCP> Date: 18 Aug 88 16:25:19 GMT References: <9832@eddie.MIT.EDU> <1170005@otter.hple.hp.com> Organization: Universitaet des Saarlandes, Saarbruecken, West Germany Lines: 79 In article <1170005@otter.hple.hp.com>, pdc@otter.hple.hp.com (Damian Cugley) writes: < / comp.unix.questions / greim@sbsvax.UUCP (Michael Greim) / Aug 12, 1988 / < < > [Csh] expands other operands. Try : < > if ( Gargle* =~ "Gargle"*) then < > [...] < > and you will see, that csh filename expands the left operand of "=~". < < By gum, so it does. Wild. (I guess the csh designers would reply as the < left operand of =~ isn't supposed to be a pattern, it can anly be expected < to act weirdly if it is... I dunno what I'd've done, maybe an error < message ('Pattern on left of =~'), or maybe treat the '*' as unmagical?) < < I would suspect the csh programmers never considered that these situations < would occur often, and didn't bother making csh react to them sensibly... Maybe. The csh looks like a program which has been written once and then has been extended often. A lot of code looks as if it has been added afterwards. The sequence of expansions is hidden in a mess of routines. In some place there is something like "sorry that we don't parse" comment. I think csh would gain a lot of speed, readability, bugfreeness if it were rewritten. Keith Bostic has announced that csh maybe will be rewritten for the next Berkeley release. If they find a volunteer. (Not me, except if somebody pays for it :-). < < < > BTW: < > And why is the pattern not command substituted? Does the manual say < > so? Should it not be possible to < > if ( "$a" =~ *`hostname`*) ... < > whereas < > if ( "$a" == `hostname` ) ... < > works ?? < < Ummm... Errmmm... well, the csh man page says command substitution comes < before filename expansion, but not where =~ patterns come in (it should do, < though). I guess the designers of csh thought something like < < if ($wombat =~ `cmd file.*`) < < would be more useful more often than having patterns outside the `...`. This does not work either (in standard csh), although you don't get an error message. < < (As a user of csh (as opposed to a programmer of csh) I'd've expected the < filenames in `...` to be expanded, *then* the command executed, *then* the < patterns involving the output of the command. This would make both of < these work - but would need two separate stages of pattern-checking (or < three?) and would be even more complicated.) Hm, I might just talk a little about the inner workings of csh : when csh sees a pattern, it sets a flag, which disables the calling of a routine, which triggers both command and filename expansion. It looks more like somebody overlooked it. Or maybe they just shied the complications you mentioned. < < The problem is the csh 'page' is already too long for the way it is now - I < had a terrible time ploughing through it for the first time. It's a big < enough topic to warrant its own mini-glossary, ToC and/or index. (Or maybe < hypertexed like the Emacs info pages? Then each section could have a < summary of how X-substitution interacts with Y-substitution without the < manual seeming repetative.) The man page is not a tutorial, it should remind you what certain things do. To learn about csh, or to explain all features there should be a doc somewhere. < < Anyone like to volunteer to re-write the entire manual? Just a thought :-) . Not me! You won't get it much shorter without omitting something, anyway. -mg -- UUCP: ...!uunet!unido!sbsvax!greim | Michael T. Greim or greim@sbsvax.UUCP | Universitaet des Saarlandes CSNET: greim%sbsvax.uucp@Germany.CSnet| FB 10 - Informatik (Dept. of CS) ARPA: greim%sbsvax.uucp@uunet.UU.NET | Bau 36, Im Stadtwald 15 voice: +49 681 302 2434 | D-6600 Saarbruecken 11, West Germany # include