|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/4568431f1161.html, оценка из 5, голосов 10
|