recho '\ 1\ 1\ 2'
# More tests of "$@"
-expect '< abc> <def> <ghi> <jkl >'
set abc def ghi jkl
+expect '< abc> <def> <ghi> <jkl >'
recho " $@ "
+expect '< abc> <def> <ghi> <jkl >'
+recho "${1+ $@ }"
-expect '<--abc> <def> <ghi> <jkl-->'
set abc def ghi jkl
+expect '<--abc> <def> <ghi> <jkl-->'
recho "--$@--"
+set "a b" cd ef gh
+expect '<a b> <cd> <ef> <gh>'
+recho ${1+"$@"}
+expect '<a b> <cd> <ef> <gh>'
+recho ${foo:-"$@"}
+expect '<a b> <cd> <ef> <gh>'
+recho "${@}"
+
expect '< >'
recho " "
expect '< - >'
expect '<three>'
recho ${x##*/}
+# pattern removal of patterns that don't match
+z=abcdef
+
+expect '<abcdef>'
+recho ${z#xyz}
+expect '<abcdef>'
+recho ${z##xyz}
+
+expect '<abcdef>'
+recho ${z%xyz}
+expect '<abcdef>'
+recho ${z%%xyz}
+
# Command substitution and the quirky differences between `` and $()
expect '<\$x>'
set one two three four five
expect '<one> <three> <five>'
recho $1 $3 ${5} $8 ${9}
+
+# length tests on positional parameters and some special parameters
+
expect '<5> <5>'
recho $# ${#}
+expect '<3>'
+recho ${#1}
+expect '<1>'
+recho ${##}
+expect '<1>'
+recho ${#?}
+expect '<5>'
+recho ${#@}
+expect '<5>'
+recho ${#*}
+expect '<5>'
+recho "${#@}"
+expect '<5>'
+recho "${#*}"
expect '<42>'
recho $((28 + 14))
expect nothing
recho $!
+expect nothing
+recho ${!}
+
+# test word splitting of assignment statements not preceding a command
+a="a b c d e"
+declare b=$a
+expect '<a> <b> <c> <d> <e>'
+recho $b
+
+a="a?b?c"
+
+echo ${a//\\?/ }
+
+echo ${a//\?/ }