diff options
-rw-r--r-- | shell/ash.c | 3 | ||||
-rw-r--r-- | shell/ash_test/ash-misc/local1.right | 4 | ||||
-rwxr-xr-x | shell/ash_test/ash-misc/local1.tests | 11 |
3 files changed, 18 insertions, 0 deletions
diff --git a/shell/ash.c b/shell/ash.c index 04ba447b1..7a097c814 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -8960,6 +8960,9 @@ mklocal(char *name) | |||
8960 | vp->flags |= VSTRFIXED|VTEXTFIXED; | 8960 | vp->flags |= VSTRFIXED|VTEXTFIXED; |
8961 | if (eq) | 8961 | if (eq) |
8962 | setvareq(name, 0); | 8962 | setvareq(name, 0); |
8963 | else | ||
8964 | /* "local VAR" unsets VAR: */ | ||
8965 | setvar(name, NULL, 0); | ||
8963 | } | 8966 | } |
8964 | } | 8967 | } |
8965 | lvp->vp = vp; | 8968 | 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 000000000..a2d121df6 --- /dev/null +++ b/shell/ash_test/ash-misc/local1.right | |||
@@ -0,0 +1,4 @@ | |||
1 | A1:'A' | ||
2 | A2:'' | ||
3 | A3:'' | ||
4 | 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 000000000..b1e675059 --- /dev/null +++ b/shell/ash_test/ash-misc/local1.tests | |||
@@ -0,0 +1,11 @@ | |||
1 | a=A | ||
2 | f() { | ||
3 | local a | ||
4 | # the above line unsets $a | ||
5 | echo "A2:'$a'" | ||
6 | unset a | ||
7 | echo "A3:'$a'" | ||
8 | } | ||
9 | echo "A1:'$a'" | ||
10 | f | ||
11 | echo "A4:'$a'" | ||