Help! Csh is eating my brain....
    Steven List 
    itkin at luke.UUCP
       
    Mon Oct 21 04:04:37 AEST 1985
    
    
  
In article <366 at zaphod.UUCP> you write:
>		alias readandset 'echo -n \!:1 ; set \!:2 = $< ' 
>		...
>		readandset "Choice? " chvar
>		...
>		if("$chvar" == "quit") ....
>
>	In particular I'd like to know what \!:1 or \!:2 means/does.
Aliases use current line history replacement.  \!:n means "replace
with word n of the current command line", where 0 is the first word (usually
the command itself).  If readandset were to be written as a Bourne shell
script, it would be as follows:
	prompt=$1
	echo "$1\c" < /dev/tty > /dev/tty
	read X
	echo X
and used as
	
	chvar=`readandset "Choice? "`
thus storing the user's input into variable chvar.  The use of "$<" in
the alias is the equivalent of "read chvar" in Bourne shell or the
alternate "set chvar = `line`" in C shell (ours does not support $<).
Thus, readandset can be define is pseudocode as
	print the second word of this command as a prompt without a
		following newline
	store the response typed in in the variable named as the second
		argument (word 2, third object)
The use of \!:n, where n can be any number, * (for all), or $ (for last),
is a very powerful means of defining macros in the C shell.  I use them
all over the place very effectively (also refer to various means of 
implementing popd, pushd directory change macros).
-- 
***
*  Steven List @ Benetics Corporation, Mt. View, CA
*  Just part of the stock at "Uncle Bene's Farm"
*  {cdp,greipa,idi,oliveb,plx,sun,tolerant}!bene!luke!itkin
***
    
    
More information about the Comp.unix
mailing list