# Test various behaviors of the `set` command. logmsg Verify behavior of `set --show` given an invalid var name set --show 'argle bargle' logmsg Verify behavior of `set --show` set semiempty '' set --show semiempty set -U var1 hello set --show var1 set -l var1 set -g var1 goodbye "and don't come back" set --show var1 set -g var2 set --show _unset_var var2 logmsg Appending works set -g var3a a b c set -a var3a set -a var3a d set -a var3a e f set --show var3a set -g var3b set -a var3b set --show var3b set -g var3c set -a var3c 'one string' set --show var3c logmsg Prepending works set -g var4a a b c set -p var4a set -p var4a d set -p var4a e f set --show var4a set -g var4b set -p var4b set --show var4b set -g var4c set -p var4c 'one string' set --show var4c logmsg Appending and prepending at same time works set -g var5 abc def set -a -p var5 0 x 0 set --show var5 logmsg Setting local scope when no local scope of the var uses the closest scope set -g var6 ghi jkl begin set -l -a var6 mno set --show var6 end logmsg Exporting works set -x TESTVAR0 set -x TESTVAR1 a set -x TESTVAR2 a b env | grep TESTVAR | cat -v logmsg if/for/while scope function test_ifforwhile_scope if set -l ifvar1 (true && echo val1) ; end if set -l ifvar2 (echo val2 && false) ; end if false ; else if set -l ifvar3 (echo val3 && false) ; end while set -l whilevar1 (echo val3 ; false) ; end set --show ifvar1 ifvar2 ifvar3 whilevar1 end test_ifforwhile_scope # $status should always be read-only, setting it makes no sense because it's immediately overwritten. logmsg readonly vars set -g status 5 exit 0