aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-07-30 15:35:05 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-07-30 15:35:05 +0000
commitc90e1be01b76aed12ef1cd77c789c842bda26ba6 (patch)
tree2891fa587a7bd35cee519aca8dc9424caad437f5 /shell
parent4f504a9e575f6acda8a1402b88b2fdb63b11d8f7 (diff)
downloadbusybox-w32-c90e1be01b76aed12ef1cd77c789c842bda26ba6.tar.gz
busybox-w32-c90e1be01b76aed12ef1cd77c789c842bda26ba6.tar.bz2
busybox-w32-c90e1be01b76aed12ef1cd77c789c842bda26ba6.zip
ash: bash compat: "shift $BIGNUM" is equivalent to "shift 1"
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c2
-rw-r--r--shell/ash_test/ash-misc/shift1.right9
-rwxr-xr-xshell/ash_test/ash-misc/shift1.tests10
3 files changed, 20 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 1eb29eb95..3a1e1d797 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -9665,7 +9665,7 @@ shiftcmd(int argc UNUSED_PARAM, char **argv)
9665 if (argv[1]) 9665 if (argv[1])
9666 n = number(argv[1]); 9666 n = number(argv[1]);
9667 if (n > shellparam.nparam) 9667 if (n > shellparam.nparam)
9668 n = shellparam.nparam; 9668 n = 0; /* bash compat, was = shellparam.nparam; */
9669 INT_OFF; 9669 INT_OFF;
9670 shellparam.nparam -= n; 9670 shellparam.nparam -= n;
9671 for (ap1 = shellparam.p; --n >= 0; ap1++) { 9671 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
index 000000000..b53453c3a
--- /dev/null
+++ b/shell/ash_test/ash-misc/shift1.right
@@ -0,0 +1,9 @@
12 3 4
20: shift: line 1: Illegal number: -1
31 2 3 4
42 3 4
53 4
64
7
81 2 3 4
91 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
index 000000000..0992d9b1b
--- /dev/null
+++ b/shell/ash_test/ash-misc/shift1.tests
@@ -0,0 +1,10 @@
1$THIS_SH -c 'shift; echo "$@"' 0 1 2 3 4
2#We do abort on -1, but then we abort. bash executes echo.
3$THIS_SH -c 'shift -1; echo "$@"' 0 1 2 3 4
4$THIS_SH -c 'shift 0; echo "$@"' 0 1 2 3 4
5$THIS_SH -c 'shift 1; echo "$@"' 0 1 2 3 4
6$THIS_SH -c 'shift 2; echo "$@"' 0 1 2 3 4
7$THIS_SH -c 'shift 3; echo "$@"' 0 1 2 3 4
8$THIS_SH -c 'shift 4; echo "$@"' 0 1 2 3 4
9$THIS_SH -c 'shift 5; echo "$@"' 0 1 2 3 4
10$THIS_SH -c 'shift 6; echo "$@"' 0 1 2 3 4