# Test expansion of variables # We don't use the test utility function of the same name because we want # different behavior. Specifically, that the expansion of any variables or # other strings before we are invoked produce the expected expansion. function expansion --description 'Prints argument count followed by arguments' echo (count $argv) $argv end set -l foo expansion "$foo" expansion $foo expansion "prefix$foo" expansion prefix$foo expansion "$$foo" expansion $$foo expansion "prefix$$foo" expansion prefix$$foo set -l foo '' expansion "$foo" expansion $foo expansion "prefix$foo" expansion prefix$foo expansion "$$foo" expansion $$foo expansion "prefix$$foo" expansion prefix$$foo set -l foo bar set -l bar expansion "$$foo" expansion $$foo expansion "prefix$$foo" expansion prefix$$foo set -l bar baz expansion "$$foo" expansion $$foo expansion "prefix$$foo" expansion prefix$$foo set -l bar baz quux expansion "$$foo" expansion $$foo expansion "prefix$$foo" expansion prefix$$foo set -l foo bar fooer fooest set -l fooer set -l fooest expansion "$$foo" expansion $$foo expansion "prefix$$foo" expansion prefix$$foo set -l fooer '' expansion $$foo expansion prefix$$foo logmsg Slices set -l foo bar '' fooest expansion "$$foo" expansion $$foo expansion "prefix$$foo" expansion prefix$$foo expansion $foo[-5..2] # No result, because the starting index is invalid and we force-reverse. expansion $foo[-2..-1] expansion $foo[-10..-5] expansion (printf '%s\n' $foo)[-5..2] expansion (printf '%s\n' $foo)[-2..-1] expansion (printf '%s\n' $foo)[-10..-5] expansion (echo one)[2..-1] echo "# foo = " set -l foo expansion "$foo[1]" expansion $foo[1] expansion "$foo[-1]" expansion $foo[-1] expansion "$foo[2]" expansion $foo[2] expansion "$foo[1 2]" expansion $foo[1 2] expansion "$foo[2 1]" expansion $foo[2 1] echo "# foo = a b c" set -l foo a b c expansion $foo[17] expansion $foo[-17] expansion $foo[17..18] expansion $foo[4..-2] echo "# foo = a" set -l foo a expansion $foo[2..-1] echo "$foo[d]" echo $foo[d] echo ()[1] echo ()[d] set -l outer out1 out2 set -l inner 1 2 echo $outer[$inner[2]] # out2 echo $outer[$inner[2..1]] # out2 out1 logmsg Percent self echo %selfNOT NOT%self \%self "%self" '%self' echo %self | string match -qr '^\\d+$' echo "All digits: $status" logmsg Catch your breath set paren ')' echo $$paren logmsg Test tilde expansion # On OS X, /tmp is symlinked to /private/tmp # $PWD is our best bet for resolving it set -l saved $PWD cd (mktemp -d) set tmpdir $PWD cd $saved mkdir $tmpdir/realhome ln -s $tmpdir/realhome $tmpdir/linkhome set expandedtilde (env HOME=$tmpdir/linkhome ../test/root/bin/fish -c 'echo ~') if test $expandedtilde != $tmpdir/linkhome echo '~ expands to' $expandedtilde ' - expected ' $tmpdir/linkhome end rm $tmpdir/linkhome rmdir $tmpdir/realhome rmdir $tmpdir logmsg Test path variables set TEST_DELIMITER one two three set TEST_DELIMITER_PATH one two three echo TEST_DELIMITER: $TEST_DELIMITER "$TEST_DELIMITER" echo TEST_DELIMITER_PATH: $TEST_DELIMITER_PATH "$TEST_DELIMITER_PATH" set testvar ONE:TWO:THREE echo "Not a path: $testvar" (count $testvar) set --path testvar $testvar echo "As a path: $testvar" (count $testvar) set testvar "$testvar:FOUR" echo "Appended path: $testvar" (count $testvar) set --unpath testvar $testvar echo "Back to normal variable: $testvar" (count $testvar) logmsg Test fatal syntax errors ../test/root/bin/fish -c 'echo $,foo' ../test/root/bin/fish -c 'echo {' ../test/root/bin/fish -c 'echo {}}' # The output for this is wrong in non-interactive mode and will need fixing when #5812 is fixed ../test/root/bin/fish -c 'command (asd)' true