[olug] Unix Tip: TEST TROUBLES IF STRING IS EMPTY

Unix Guru Universe listserv at ugu.com
Sun Jun 8 15:31:06 UTC 2003


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

			      UNIX GURU UNIVERSE 
			         UNIX HOT TIP

			Unix Tip 1985 - June  8, 2003

		    http://www.ugu.com/sui/ugu/show?tip.today

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


TEST TROUBLES IF STRING IS EMPTY

(1) bad ex.
if [ `echo "$OPTARG" | sed '/^[0-9][0-9]*$/!d` = "" ]
 
(2) fixed ex.
if [ `echo "$OPTARG" | sed '/^[0-9][0-9]*$/ s//X/'`= "X" ]

(3) another fixed ex. (Bourne Shell, ksh)
if [ -n "`echo "$OPTARG" | sed '/^[0-9][0-9]*$/!d'`" ]

(1) This produces an easy 
to overlook error.  On 
success and the lack of 
double quotes on the left 
side cause test to think 
there is no parameter, 
producing an error (1).  
This is because the result 
is an empty string without
quotes and test doesn't 
know that it is dealing 
with a string, no parameter 
seen.

Adding a character to the 
beginning of each string is 
a trick to fix it (2).  The 
test command sees a string 
and simply compares as normal, 
passing over the pair of
initial and equal characters.

Another fix (3) is to surround 
the empty/not empty string with 
double quotes.  Test will see 
the empty string and things 
work as normal.  This (3) works 
in Bourne Shell and ksh but NOT 
in csh.

Simple ex.
$ foo=""
$ test -n $foo          # fails
$ test -n `echo $foo`   # fails
$ test -z `echo x$foo`  # works, might throw off the logic
$ test -n "`echo $foo`" # works in sh & ksh


This tip generously supported by: bigoldbulldog at hotmail.com


--------------------------------------------------------------------------
To Subscribe:    http://www.ugu.com/sui/ugu/show?tip.subscribe
To Unsubscribe:  http://www.ugu.com/sui/ugu/show?tip.unsubscribe
To Submit A Tip: http://www.ugu.com/sui/ugu/show?tip.today

==========================================================================
DISCLAIMER: All UNIX HOT TIPS ARE OWNED BY THE UNIX GURU UNIVERSE AND ARE
NOT TO BE SOLD, PRINTED OR USED WITHOUT THE WRITTEN CONSENT OF THE UNIX 
GURU UNIVERSE. ALL TIPS ARE "USE AT YOUR OWN RISK". UGU  ADVISES THAT 
ALL TIPS BE TESTED IN A NON-PRODUCTION DEVELOPMENT ENVIRONMENT FIRST.

Unix Guru Universe - www.ugu.com - tips at ugu.com - Copyright 1994-2001
==========================================================================



More information about the OLUG mailing list