aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/expansion.in
diff options
context:
space:
mode:
authorGravatar Kevin Ballard <kevin@sb.org>2014-08-20 21:19:08 -0700
committerGravatar Kevin Ballard <kevin@sb.org>2014-08-20 21:45:07 -0700
commit3981b644d68f6b6947b4a12810c2fa5e09da4e58 (patch)
treefd00d82b90283ba3810eb04ffc40b1632fc1e155 /tests/expansion.in
parentd0c85471b40fee548efc35a370f5d5c4b656f66a (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.in64
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