C-Shell weirdness
    jsdy at hadron.UUCP 
    jsdy at hadron.UUCP
       
    Sat Mar 29 18:21:00 AEST 1986
    
    
  
In article <676 at nbires.UUCP> nose at nbires.UUCP (Steve Dunn) writes:
>           if ($arg == '-b') echo 'UNIX is fun'
>Will get the error "If: missing filename" if $arg happens to equal
>-x or -e or any of the other constructs used to test file attributes.
>	 if (x$arg == 'x-b') echo 'UNIX is fun'
>Is there a better way to do this and why does this happen in the first
>place?
[The rest of this was ably answered elsewhere.  HOWEVER ...]
Consider what the command line is when $arg is -e or -x or whatever:
	if (-e == '-b') ...
Now, doesn't that just look like it's asking to evaluate -e on file
"==", or something like that?  Of course the parser recognises "=="
as a relation, and so complains instead that there's no file name.
Your alternative is actually a venerable shell-script idiom to cancel
the flag effect of the "-".  However, you really should put $arg in
double-quotes to negate the effect of an in-valid string:
	set arg = "-b -e"
	if (x$arg == '-b')
becomes
	if (x-b -e == '-b')
with who knows what syntax error reports.  I'd use:
	if ("X$arg" == "X-b") ...
-- 
	Joe Yao		hadron!jsdy at seismo.{CSS.GOV,ARPA,UUCP}
    
    
More information about the Comp.unix.wizards
mailing list