ash: bash compat: "shift $BIGNUM" is equivalent to "shift 1"
authorDenis Vlasenko <vda.linux@googlemail.com>
Wed, 30 Jul 2008 15:35:05 +0000 (15:35 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Wed, 30 Jul 2008 15:35:05 +0000 (15:35 -0000)
shell/ash.c
shell/ash_test/ash-misc/shift1.right [new file with mode: 0644]
shell/ash_test/ash-misc/shift1.tests [new file with mode: 0755]

index 1eb29eb9551eb6b8772be845c0a88f03ac5f6fb9..3a1e1d797ca1275b6f9ae02b783a9c698710daa6 100644 (file)
@@ -9665,7 +9665,7 @@ shiftcmd(int argc UNUSED_PARAM, char **argv)
        if (argv[1])
                n = number(argv[1]);
        if (n > shellparam.nparam)
-               n = shellparam.nparam;
+               n = 0; /* bash compat, was = shellparam.nparam; */
        INT_OFF;
        shellparam.nparam -= n;
        for (ap1 = shellparam.p; --n >= 0; ap1++) {
diff --git a/shell/ash_test/ash-misc/shift1.right b/shell/ash_test/ash-misc/shift1.right
new file mode 100644 (file)
index 0000000..b53453c
--- /dev/null
@@ -0,0 +1,9 @@
+2 3 4
+0: shift: line 1: Illegal number: -1
+1 2 3 4
+2 3 4
+3 4
+4
+
+1 2 3 4
+1 2 3 4
diff --git a/shell/ash_test/ash-misc/shift1.tests b/shell/ash_test/ash-misc/shift1.tests
new file mode 100755 (executable)
index 0000000..0992d9b
--- /dev/null
@@ -0,0 +1,10 @@
+$THIS_SH -c 'shift;    echo "$@"' 0 1 2 3 4
+#We do abort on -1, but then we abort. bash executes echo.
+$THIS_SH -c 'shift -1; echo "$@"' 0 1 2 3 4
+$THIS_SH -c 'shift  0; echo "$@"' 0 1 2 3 4
+$THIS_SH -c 'shift  1; echo "$@"' 0 1 2 3 4
+$THIS_SH -c 'shift  2; echo "$@"' 0 1 2 3 4
+$THIS_SH -c 'shift  3; echo "$@"' 0 1 2 3 4
+$THIS_SH -c 'shift  4; echo "$@"' 0 1 2 3 4
+$THIS_SH -c 'shift  5; echo "$@"' 0 1 2 3 4
+$THIS_SH -c 'shift  6; echo "$@"' 0 1 2 3 4