Make 'set -ql' search up to function scope

Previously 'set -ql' would only look for variables in the
immediate local scope. This was not very useful. It's also
arguably surprising, since a 'set -l' in a function, followed
by a 'set -ql' in a child block, would fail. There was also no
way to check for a function-scoped variable, since omitting the
scope would also pull in global variables.

We could revisit this and introduce an explicit function scope.

Fixes #2502
This commit is contained in:
ridiculousfish
2015-10-23 15:15:39 -07:00
parent 036a29acf5
commit d5f3a09ce9
3 changed files with 31 additions and 19 deletions

View File

@@ -177,3 +177,14 @@ true ; set -NOT_AN_OPTION 2> /dev/null ; echo 9 $status # no passthrough
false ; set foo (echo A; true) ; echo 10 $status $foo
true ; set foo (echo B; false) ; echo 11 $status $foo
true
echo "Verify set -ql behavior" # see 2502
function setql_check
set -l setql_foo val
if set -ql setql_foo
echo Pass
else
echo Fail
end
end
setql_check

View File

@@ -34,3 +34,5 @@ Verify that set passes through exit status, except when passed -n or -q or -e
9 1
10 0 A
11 1 B
Verify set -ql behavior
Pass