bug? in csh

SLG6M%USU.BITNET at WISCVM.arpa SLG6M%USU.BITNET at WISCVM.arpa
Sun Jul 13 10:58:00 AEST 1986


Mark Sunderlin (seismo!why_not!scsnet!sunder) writes:

>(Feel free to s/bug/problem throughout this article)

Gladly.  One of Murphy's Law's of Computing goes something
like "That's not a bug, that's a FEATURE."

>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.

It is a feature of /bin/csh that it tries to process these metacharacters
in variable expressions.  Fortunately, however, there is a way to get
around this problem without resorting to using the Bourne shell.  All
examples were done with csh on HP-UX V5.05.

% set fix = "string[67]"
% echo $fix
echo: No match.
(^^^^^^^^^^^^^^ this looks familiar)
% echo "$fix"
string[67]
(^^^^^^^^^ also familiar)
% set
argv    ()
autologout      60
cwd     /users/barts
fix     string[67]
(       ^^^^^^^^^^ same story here, too)
history 20
home    /users/barts
ignoreeof
mail    /usr/mail/barts
notify
path    (. /bin /usr/bin /usr/contrib/bin /usr/local/bin /etc /users/barts/cmds)
prompt  %
shell   /bin/csh
status  0
term    vt100
% set noglob
(^^^^^^^^^^^ see explanation following this example)
% echo $fix
string[67]
(^^^^^^^^^ no more problem!)
% unset noglob
(^^^^^^^^^^^^^ see explanation)
% set fix = `grep define fix10`
% echo $fix
#define key_f10 CUR #define key_f2 CUR #define key_f3 CUR #define key_f4 CUR #de
fine key_f5 CUR #define key_f6 CUR #define key_f7 CUR #define key_f8 CUR #define
 key_f9 CUR #define key_home CUR
(^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ more familiar stuff)
% set noglob
% set fix = `grep define fix10`
(^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ we must compute this anew with noglob set;
                                problems creep in at this step)
% echo $fix
#define key_f10 CUR Strings[67] #define key_f2 CUR Strings[68] #define key_f3 CU
R Strings[69] #define key_f4 CUR Strings[70] #define key_f5 CUR Strings[71] #def
ine key_f6 CUR Strings[72] #define key_f7 CUR Strings[73] #define key_f8 CUR Str
ings[74] #define key_f9 CUR Strings[75] #define key_home CUR Strings[76]
(^^^^ gee, this looks just like the Bourne shell!)

To quote the manual entry for csh(1) on my system:

     "If [the csh variable noglob is] set, filename expansion is
     inhibited.  This is most useful in shell scripts which are not
     dealing with filenames, or after a list of filenames has been
     obtained and further expansions are not desirable."

Unfortunately, noglob has its own problems, as it disables *all*
filename expansion, so things like "ls *.out" will result in error
messages even if you have an a.out file on your current directory.

                --David Barts
                  Utah State University, Logan, Utah, USA
     Bitnet:      SLG6M at USU.BITNET
     ARPAnet:     slg6m%usu.bitnet at wiscvm.arpa
     AT&T:        801-753-2952
     USPS:        654 1/2 E 800 N / Logan, UT 84321



More information about the Comp.unix.wizards mailing list