Subject: bin/37493: /bin/sh exits if shift fails, but shouldn't
To: None <gnats-admin@netbsd.org, netbsd-bugs@netbsd.org>
From: None <rillig@NetBSD.org>
List: netbsd-bugs
Date: 12/06/2007 21:55:01
>Number:         37493
>Category:       bin
>Synopsis:       /bin/sh exits if shift fails, but shouldn't
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Dec 06 21:55:01 +0000 2007
>Originator:     Roland Illig
>Release:        NetBSD 4.99.30
>Organization:
>Environment:
>Description:
When "shift" is used in "set -e" mode, the shell exits if the "shift"
occurs in a conditional statement. This is unexpected and not covered by
the documentation.


>How-To-Repeat:
$ sh -c 'set -ex; shift || echo failed.'
+ shift
shift: can't shift that many

$ bash -c 'set -ex; shift || echo failed.'
+ shift
+ echo failed.
failed.

>Fix: