summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/ash.c3
-rw-r--r--shell/ash_test/ash-misc/local1.right4
-rwxr-xr-xshell/ash_test/ash-misc/local1.tests11
3 files changed, 18 insertions, 0 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 04ba447..7a097c8 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -8960,6 +8960,9 @@ mklocal(char *name)
vp->flags |= VSTRFIXED|VTEXTFIXED;
if (eq)
setvareq(name, 0);
+ else
+ /* "local VAR" unsets VAR: */
+ setvar(name, NULL, 0);
}
}
lvp->vp = vp;
diff --git a/shell/ash_test/ash-misc/local1.right b/shell/ash_test/ash-misc/local1.right
new file mode 100644
index 0000000..a2d121d
--- /dev/null
+++ b/shell/ash_test/ash-misc/local1.right
@@ -0,0 +1,4 @@
+A1:'A'
+A2:''
+A3:''
+A4:'A'
diff --git a/shell/ash_test/ash-misc/local1.tests b/shell/ash_test/ash-misc/local1.tests
new file mode 100755
index 0000000..b1e6750
--- /dev/null
+++ b/shell/ash_test/ash-misc/local1.tests
@@ -0,0 +1,11 @@
+a=A
+f() {
+ local a
+ # the above line unsets $a
+ echo "A2:'$a'"
+ unset a
+ echo "A3:'$a'"
+}
+echo "A1:'$a'"
+f
+echo "A4:'$a'"