diff --git a/src/env.cpp b/src/env.cpp index c11a60ba4..0d2625007 100644 --- a/src/env.cpp +++ b/src/env.cpp @@ -1251,6 +1251,13 @@ mod_result_t env_stack_impl_t::remove(const wcstring &key, int mode) { result.global_modified = true; } else if (query.local) { result.status = remove_from_chain(locals_, key) ? ENV_OK : ENV_NOT_FOUND; + } else if (query.function) { + auto node = locals_; + while (node->next) { + node = node->next; + if (node->new_scope) break; + } + result.status = remove_from_chain(node, key) ? ENV_OK : ENV_NOT_FOUND; } else { DIE("Unknown scope"); } diff --git a/tests/checks/set.fish b/tests/checks/set.fish index 2ebf91896..2d448519f 100644 --- a/tests/checks/set.fish +++ b/tests/checks/set.fish @@ -806,3 +806,17 @@ end test-function-scope echo $funcvar $funcvar2 # CHECK: + +function erase-funcvar + set -l banana 1 + begin + set -l banana 2 + set -ef banana + echo $banana + # CHECK: 2 + end + echo $banana + # CHECK: +end + +erase-funcvar