ash: bash compat: "shift $BIGNUM" is equivalent to "shift 1"

This commit is contained in:
Denis Vlasenko 2008-07-30 15:35:05 +00:00
parent 4f504a9e57
commit c90e1be01b
3 changed files with 20 additions and 1 deletions

View 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++) {

View File

@ -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

View File

@ -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