logmsg Test scoping rules for functions set -e smurf function setter set smurf green end function unsetter set -e smurf end function call1 set smurf blue; setter; if test $smurf = blue; echo Test 1 pass; else; echo Test 1 fail; end end function call2 set smurf blue; unsetter; if test $smurf = blue; echo Test 2 pass; else; echo Test 2 fail; end end call1 call2 function call3 setter; if test $smurf = green; echo Test 3 pass; else; echo Test 3 fail; end end function call4 unsetter; if not set -q smurf; echo Test 4 pass; else; echo Test 4 fail; end end set -g smurf yellow call3 call4 set -l foo 1 set -g bar 2 set -U baz 3 set -l -q foo if test $status -ne 0 echo Test 5 fail else echo Test 5 pass end; if not set -g -q bar echo Test 6 fail else echo Test 6 pass end; if not set -U -q baz echo Test 7 fail else echo Test 7 pass end; set -u -l -q foo if test $status -ne 0 echo Test 8 fail else echo Test 8 pass end; if not set -u -g -q bar echo Test 9 fail else echo Test 9 pass end; if not set -u -U -q baz echo Test 10 fail else echo Test 10 pass end; set -x -l -q foo if test $status -eq 0 echo Test 11 fail else echo Test 11 pass end; if set -x -g -q bar echo Test 12 fail else echo Test 12 pass end; if set -x -U -q baz echo Test 13 fail else echo Test 13 pass end; set -x -l foo 1 set -x -g bar 2 set -x -U baz 3 set -l -q foo if test $status -ne 0 echo Test 14 fail else echo Test 14 pass end; if not set -g -q bar echo Test 15 fail else echo Test 15 pass end; if not set -U -q baz echo Test 16 fail else echo Test 16 pass end; set -u -l -q foo if test $status -ne 1 echo Test 17 fail else echo Test 17 pass end; if set -u -g -q bar echo Test 18 fail else echo Test 18 pass end; if set -u -U -q baz echo Test 19 fail else echo Test 19 pass end; set -x -l -q foo if test $status -ne 0 echo Test 20 fail else echo Test 20 pass end; if not set -x -g -q bar echo Test 21 fail else echo Test 21 pass end; if not set -x -U -q baz echo Test 22 fail else echo Test 22 pass end; set -U -e baz logmsg Verify subcommand statuses echo (false) $status (true) $status (false) $status logmsg Verify that set passes through exit status, except when passed -n or -q or -e false ; set foo bar ; echo 1 $status # passthrough true ; set foo bar ; echo 2 $status # passthrough false ; set -q foo ; echo 3 $status # no passthrough true ; set -q foo ; echo 4 $status # no passthrough false ; set -n > /dev/null ; echo 5 $status # no passthrough false ; set -e foo ; echo 6 $status # no passthrough true ; set -e foo ; echo 7 $status # no passthrough false ; set -h > /dev/null ; echo 8 $status # no passthrough 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 logmsg "Verify set -ql behavior (#2502)" function setql_check set -l setql_foo val if set -ql setql_foo echo Pass else echo Fail end end setql_check