Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Pavel Vasilyev                       2:5020/1042.65 07 Sep 2005  16:12:16
 To : All
 Subject : Unix Tip: TEST TROUBLES IF
 -------------------------------------------------------------------------------- 
 
 
 (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
 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 --- 
  * Origin: * --------------------------------------------- * (2:5020/1042.65)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Unix Tip: TEST TROUBLES IF   Pavel Vasilyev   07 Sep 2005 16:12:16 
Архивное /ru.linux/4568431f1161.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional