diff options
author | Kevin Ballard <kevin@sb.org> | 2014-08-20 21:19:08 -0700 |
---|---|---|
committer | Kevin Ballard <kevin@sb.org> | 2014-08-20 21:45:07 -0700 |
commit | 3981b644d68f6b6947b4a12810c2fa5e09da4e58 (patch) | |
tree | fd00d82b90283ba3810eb04ffc40b1632fc1e155 /tests/expansion.in | |
parent | d0c85471b40fee548efc35a370f5d5c4b656f66a (diff) |
Fix double expansions (`$$foo`)
Double expansions of variables had the following issues:
* `"$$foo"` threw an error no matter what the value of `$foo` was.
* `set -l foo ''; echo $$foo` threw an error because of the expansion of
`$foo` to `''`.
With this change, double expansion always works properly. When
double-expanding a multi-valued variable, in a double-quoted string the
first word of the inner expansion is used for the outer expansion, and
outside of a quoted string every word is used for the double-expansion
in each of the arguments.
> set -l foo bar baz
> set -l bar one two
> set -l baz three four
> echo "$$foo"
one two baz
> echo $$foo
one two three four
Diffstat (limited to 'tests/expansion.in')
-rw-r--r-- | tests/expansion.in | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/expansion.in b/tests/expansion.in new file mode 100644 index 00000000..d362e789 --- /dev/null +++ b/tests/expansion.in @@ -0,0 +1,64 @@ +# Test expansion of variables + +function show --description 'Prints argument count followed by arguments' + echo (count $argv) $argv +end + +set -l foo +show "$foo" +show $foo +show "prefix$foo" +show prefix$foo + +show "$$foo" +show $$foo +show "prefix$$foo" +show prefix$$foo + +set -l foo '' +show "$foo" +show $foo +show "prefix$foo" +show prefix$foo + +show "$$foo" +show $$foo +show "prefix$$foo" +show prefix$$foo + +set -l foo bar +set -l bar +show "$$foo" +show $$foo +show "prefix$$foo" +show prefix$$foo + +set -l bar baz +show "$$foo" +show $$foo +show "prefix$$foo" +show prefix$$foo + +set -l bar baz quux +show "$$foo" +show $$foo +show "prefix$$foo" +show prefix$$foo + +set -l foo bar fooer fooest +set -l fooer +set -l fooest +show "$$foo" +show $$foo +show "prefix$$foo" +show prefix$$foo + +set -l fooer '' +show $$foo +show prefix$$foo + +set -l foo bar '' fooest +show "$$foo" +show $$foo +show "prefix$$foo" +show prefix$$foo |