[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Test existence of shell variable, bash, csh



On Sat, May 05, 2001 at 02:34:47PM -0700, Karsten M. Self wrote:
> This came up on another list.  The problem involves testing existence of
> a Unix shell variable from another program with limited system
> interaction features.
> 
> I usually write this in bash as:
> 
>     if [ x${MYVAR} = x ]; then
>         echo 'MYVAR doesn't exist (or isn't set)'
> 	else echo "MYVAR exists, value: $MYVAR"
>     fi
> 
> ...which essentially checks whether or not the variable has a non-null
> value.  But would report that $MYVAR doesn't exist if in fact it was set
> equal to "".

i've personally always found this syntax utterly hideous, i also have
not really understood its justification over say:

if [ -n "$MYVAR" ] ; then
	echo "MYVAR is set"
fi

i have used this syntax for quite awhile and have yet to encounter
problems, maybe test -n is not portable i don't think so though.  

man test says -n tests whether the string is not null, whereas -z
tests that the string is null.  you can also get away with:

if [ "$MYVAR" ] ; then
	echo "MYVAR is set"
fi

but i suspect this is probably less safe.  

> In contrast, csh and derivatives have:
> 
>    $?MYVAR
> 
> ...which allows testing of presence of a variable.
> 
> ...but I'm not aware of a similar bash/korn/bourne feature.  Anyone?

see above.  

-- 
Ethan Benson
http://www.alaska.net/~erbenson/

Attachment: pgp3nEYc7FUww.pgp
Description: PGP signature


Reply to: