Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!watmath!clyde!cbatt!cbosgd!ihnp4!chinet!megabyte From: megabyte@chinet.UUCP (Mark E. Sunderlin) Newsgroups: net.unix-wizards Subject: Problem with csh;request for fix (LONG) Message-ID: <405@chinet.UUCP> Date: Mon, 7-Jul-86 11:00:50 EDT Article-I.D.: chinet.405 Posted: Mon Jul 7 11:00:50 1986 Date-Received: Tue, 8-Jul-86 06:35:34 EDT Reply-To: megabyte@chinet.UUCP (Mark E. Sunderlin) Distribution: net Organization: chi-net, Public Access UN*X, Chicago IL Lines: 111 Keywords: csh,bug,zilog,zeus Summary: set var = "f[6]" question (Feel free to s/bug/problem/ throughout this article) Ok my fellow unix-wizards, I have come across a bug(?) I can't understand. It seems that csh can't deal with variable assignment when the value to assign to the variable has the meta characters [] or {} in it. However it seems that the bourne shell has no problems with it. Reproduce with the following transcript of a csh session. My own comments are in ()'s and are not part of the xscript: ---------------------------------------------------------------------- 1% set fix = "string[67]" 2% set argv () fix string[67] (^^^^^^^^^^^^^^^^^ OK, the value IS in the variable) history 21 home /z11/sunder logname sunder mail /usr/spool/mail/sunder path (. /bin /usr/bin /z/informix3.3 /z/universal /z/bin /z11/sunder/bin ) prompt !% shell /bin/csh status 0 term d1 tz EST5EDT 3% echo $fix echo: No match. (^^^^^^^^^^^^^^ but csh trys to expand the [67] somehow) 4% sh (^^^^^^ Now we go to the bourne shell) $ fix="string[67]" $ set HOME=/z11/sunder IFS= IGNOREEXIT=1 LOGNAME=sunder MAIL=/usr/spool/mail/sunder PATH=:/bin:/usr/bin:/z/informix3.3:/z/universal:/z/bin:/z11/sunder/bin: SHELL=/bin/csh TERM=d1 TZ=EST5EDT fix=string[67] (^^^^^^^^^^^^^ Value is in there fine) $ echo $fix string[67] (^^^^^^^^^ and it echos without problems of expansion) 5% echo "$fix" ( ^^^^^^^^ a way aroung this trivial example) string[67] 6% --------------------------------------------------------------------------- I always considered this a trivial problem with csh (and one more reason why I use sh or ksh) until a user on my system showed me the following problem. He was trying to set a variable equal to the output of a grep statement in which the lines he was grepping for had [] characters in them. Here is a transcript of his attempt,again with my comments in ()'s: ---------------------------------------------------------------------------- 1% cat fix10 ( ^^^^^^ a subset of his orignal "C" program he was grepping) #define key_f10 CUR Strings[67] #define key_f2 CUR Strings[68] #define key_f3 CUR Strings[69] #define key_f4 CUR Strings[70] #define key_f5 CUR Strings[71] #define key_f6 CUR Strings[72] #define key_f7 CUR Strings[73] #define key_f8 CUR Strings[74] #define key_f9 CUR Strings[75] #define key_home CUR Strings[76] 2% set fix = `grep define fix10` 3% echo $fix #define key_f10 CUR #define key_f2 CUR #define key_f3 CUR #define key_f4 CUR ( ^^^^ All the [##]'s are gone!!!!) #define key_f5 CUR #define key_f6 CUR #define key_f7 CUR #define key_f8 CUR # define key_f9 CUR #define key_home CUR 4% sh ( ^^^ now we go to the bourne shell) $ fix=`grep define fix10` $ echo $fix #define key_f10 CUR Strings[67] #define key_f2 CUR Strings[68] #define key_f3 ( ^^^^ Works under bourne) CUR Strings[69] #define key_f4 CUR Strings[70] #define key_f5 CUR Strings[71 ] #define key_f6 CUR Strings[72] #define key_f7 CUR Strings[73] #define key_f 8 CUR Strings[74] #define key_f9 CUR Strings[75] #define key_home CUR Strings [76] 5% --------------------------------------------------------------------------- The same behavior happens with the {} char in a file also. The <> chars pass through csh ok. Here is what I want to know: I think I understand WHY this is going on, it's just a bug(?) in csh(If I'm wrong, let me know). The real question is, is there a way around this, so that the variable is set to the actual grep output rather than having the metacharacters striped out? Comments to the effect of "Just use the Bourne shell" will fall on sympathetic ears on my part but will cause great unrest among my users. For the record: I use running ZEUS 3.21 on a Zilog model 31. ZEUS, for those of you fortunate to have not dealt with it is a SYSIII port with a few Berkley tools (csh,vi,more,etc) thrown in. I'm not sure which versions of sh and csh Zilog used, as I have no way to relate them to the BSD or USG revision numbers. The opinions expressed herein are my own and do not reflect those of the Internal Revenue Service or any other agency of the United States Government. (A US Gov't disclaimer produced for the protection of the taxpayers from their fellow taxpayers) -- _________________________________________________________________________ UUCP: (1) seismo!why_not!scsnet!sunder Mark E. Sunderlin (2) ihnp4!chinet!megabyte aka Dr. Megabyte CIS: 74026,3235 (202) 634-2529 Quote: "I drank what? " - Socrates (9-4 EDT) Mail: IRS 1111 Constitution Ave. NW PM:PFR:D:NO Washington, DC 20224