--- /dev/null
+--- busybox.old/shell/ash.c 2006-11-22 12:02:03.000000000 -0800
++++ busybox.dev/shell/ash.c 2006-11-22 11:05:32.000000000 -0800
+@@ -12257,9 +12257,18 @@
+ const char *p;
+ char **aptr;
+ int flag = argv[0][0] == 'r'? VREADONLY : VEXPORT;
++ int mask = ~0;
+ int notp;
+
+- notp = nextopt("p") - 'p';
++ while ((notp = nextopt("np"))) {
++ if (notp == 'n') {
++ mask = ~flag;
++ } else { /* p */
++ break;
++ }
++ }
++
++ notp -= 'p';
+ if (notp && ((name = *(aptr = argptr)))) {
+ do {
+ if ((p = strchr(name, '=')) != NULL) {
+@@ -12267,10 +12276,11 @@
+ } else {
+ if ((vp = *findvar(hashvar(name), name))) {
+ vp->flags |= flag;
++ vp->flags &= mask;
+ continue;
+ }
+ }
+- setvar(name, p, flag);
++ setvar(name, p, flag & mask);
+ } while ((name = *++aptr) != NULL);
+ } else {
+ showvars(argv[0], flag, 0);