ash: fix for read $IFS splitting. Closes bug 235
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 8 Jan 2010 14:44:07 +0000 (15:44 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 8 Jan 2010 14:44:07 +0000 (15:44 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c
shell/ash_test/ash-read/read_ifs.right
shell/ash_test/ash-read/read_ifs.tests

index 2c1779f3214eba0fcb115868b37e46a9c29736d0..b47f0e881f3d7058bab84e05ec6cd010f3efcecb 100644 (file)
@@ -12615,7 +12615,7 @@ readcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
 #endif
 
        status = 0;
-       startword = 2;
+       startword = 1;
        backslash = 0;
 #if ENABLE_ASH_READ_TIMEOUT
        if (timeout) /* NB: ensuring end_ms is nonzero */
index 027ecd18f2d9849cc88cbacbebe7ac21b5c53ae7..b5233445698467173a1933224985000e9667af67 100644 (file)
@@ -1,7 +1,10 @@
-.a. .b. .c.
-.a. .b. .c.
-.a. .. .b,c.
-.a. .. .b,c.
-.a. .. .c.
-.a. .. .c. .d.
-.a. .. .b,c,d  ,  ,.
+test 1: .a. .b. .c.
+test 2: .a. .b. .c.
+test 3: .a. .. .b,c.
+test 4: .a. .. .b,c.
+test 5: .a. .. .c.
+test 6: .a. .. .c. .d.
+test 7: .a. .. .b,c,d  ,  ,.
+test 8: .. .a. .b. .c.
+test 9: .a. .b. .c. ..
+test A: .. .a. .. .b. .c.
index cf7cd934c0c9e16554a6ff2296d27e48f8c0106d..6e83112470072c8202cdcfa3570464250987653e 100755 (executable)
@@ -1,7 +1,10 @@
-printf 'a\t\tb\tc\n' | ( IFS=$(printf "\t") read a b c; echo ".$a. .$b. .$c." )
-printf 'a\t\tb\tc\n' | ( IFS=$(printf " \t") read a b c; echo ".$a. .$b. .$c." )
-printf 'a,,b,c\n'    | ( IFS="," read a b c; echo ".$a. .$b. .$c." )
-printf 'a,,b,c\n'    | ( IFS=" ," read a b c; echo ".$a. .$b. .$c." )
-printf 'a ,, c\n'    | ( IFS=" ," read a b c; echo ".$a. .$b. .$c." )
-printf 'a ,, c d\n'  | ( IFS=" ," read a b c d; echo ".$a. .$b. .$c. .$d." )
-printf ' a,,b,c,d  ,  ,\n' | ( IFS=" ," read a b c; echo ".$a. .$b. .$c." )
+printf 'a\t\tb\tc\n' | ( IFS=$(printf "\t") read a b c;  echo "test 1: .$a. .$b. .$c." )
+printf 'a\t\tb\tc\n' | ( IFS=$(printf " \t") read a b c; echo "test 2: .$a. .$b. .$c." )
+printf 'a,,b,c\n'    | ( IFS="," read a b c;  echo "test 3: .$a. .$b. .$c." )
+printf 'a,,b,c\n'    | ( IFS=" ," read a b c; echo "test 4: .$a. .$b. .$c." )
+printf 'a ,, c\n'    | ( IFS=" ," read a b c; echo "test 5: .$a. .$b. .$c." )
+printf 'a ,, c d\n'  | ( IFS=" ," read a b c d;     echo "test 6: .$a. .$b. .$c. .$d." )
+printf ' a,,b,c,d  ,  ,\n' | ( IFS=" ," read a b c; echo "test 7: .$a. .$b. .$c." )
+printf '\t,\ta\t,\tb\tc'   | ( IFS=$(printf " \t,") read a b c d;   echo "test 8: .$a. .$b. .$c. .$d." )
+printf '\t\ta\t,\tb\tc'    | ( IFS=$(printf " \t,") read a b c d;   echo "test 9: .$a. .$b. .$c. .$d." )
+printf '\t,\ta\t,,\tb\tc'  | ( IFS=$(printf " \t,") read a b c d e; echo "test A: .$a. .$b. .$c. .$d. .$e." )