sh: Don't modify exit status when break/continue/return passes !.

This matches what would happen if  ! P  were to be replaced with
if P; then false; else true; fi.

Example:
  f() { ! return 0; }; f
This commit is contained in:
jilles 2013-04-12 15:19:35 +00:00
parent fd27383897
commit 8b20292658
3 changed files with 12 additions and 0 deletions

View File

@ -279,6 +279,8 @@ evaltree(union node *n, int flags)
break;
case NNOT:
evaltree(n->nnot.com, EV_TESTED);
if (evalskip)
goto out;
exitstatus = !exitstatus;
break;

View File

@ -0,0 +1,4 @@
# $FreeBSD$
f() { ! return $1; }
f 0 && ! f 1

View File

@ -0,0 +1,6 @@
# $FreeBSD$
while :; do
! break
exit 3
done