C-Shell weirdness (count of words in a variable)

maartenj at ark.UUCP maartenj at ark.UUCP
Sun Mar 30 10:22:59 AEST 1986


In article <2024 at hao.UUCP> woods at hao.UUCP writes:
>> > set hosed
>> > echo $#hosed
>> > 
>> > THEN you will get 0.
>> 
>> Sorry, I tried the example that is supposed to yield zero and I got one
>> instead.
>> 
>> The answer is that you can't have a variable with 0 words at all.
>> This fact I find counter-intuitive and undocumented
>
>    I stand corrected. It seems that $#var is either an error or a positive
>integer. Counterintuitive is debatable, however; a variable with no words
>is kind of like saying something that is nothing. The only exception
>I am aware of to this is that $#argv CAN be zero if it occurs in a shell
>which was given no arguments (which includes your login shell; try it).
>THIS is what is counter-intutive to ME, that argv behaves differently than
>all other variables in this respect.

Try :
	set hosed = ()
	echo $#hosed 
This will give you 0.

The point is the definitions of a `word'. A word is defined as being separated
by a tab, space or newline accept when the string, containing these characters,
is enclosed in `'' or  `"' (with one exception when you do something like:
"`cat /etc/passwd`" this will force new words at newlines).

The actual syntax is of `set' is :
	set arg = ( wordlist )
when you only set the arg to one word you can leave out the `(' and `)':
	set arg = word
Finally you have the abbreviation :
	set arg
This is exactly the same as
	set arg = ''
e.i. it will set arg to a null string.

So $#arg will give the number of words in $arg.
-- 

			Maarten Jan  Huisjes.  (maartenj at vu44.UUCP)
			{seismo|decvax|philabs}!mcvax!vu44!maartenj



More information about the Comp.bugs.4bsd.ucb-fixes mailing list