summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/ash_test/ash-vars/param_expand_alt.right9
-rwxr-xr-xshell/ash_test/ash-vars/param_expand_alt.tests28
-rw-r--r--shell/ash_test/ash-vars/param_expand_assign.right27
-rwxr-xr-xshell/ash_test/ash-vars/param_expand_assign.tests39
-rw-r--r--shell/ash_test/ash-vars/param_expand_bash_substring.right64
-rwxr-xr-xshell/ash_test/ash-vars/param_expand_bash_substring.tests84
-rw-r--r--shell/hush_test/hush-vars/param_expand_alt.right1
-rwxr-xr-xshell/hush_test/hush-vars/param_expand_alt.tests14
-rwxr-xr-xshell/hush_test/hush-vars/param_expand_assign.tests27
-rwxr-xr-xshell/hush_test/hush-vars/param_expand_bash_substring.tests13
10 files changed, 283 insertions, 23 deletions
diff --git a/shell/ash_test/ash-vars/param_expand_alt.right b/shell/ash_test/ash-vars/param_expand_alt.right
new file mode 100644
index 0000000..c733c14
--- /dev/null
+++ b/shell/ash_test/ash-vars/param_expand_alt.right
@@ -0,0 +1,9 @@
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: bad substitution
+_0_ __
+_z_ _z_
+_ _ _ _ _
+_aaaa _ _ _word _word
+_ _ _ _ _
+_ _ _ _word _
+_fff _ _ _word _word
diff --git a/shell/ash_test/ash-vars/param_expand_alt.tests b/shell/ash_test/ash-vars/param_expand_alt.tests
new file mode 100755
index 0000000..c9c4249
--- /dev/null
+++ b/shell/ash_test/ash-vars/param_expand_alt.tests
@@ -0,0 +1,28 @@
+# First try some invalid patterns. Do in subshell due to parsing error.
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+"$THIS_SH" -c 'echo ${+} ; echo moo' SHELL
+"$THIS_SH" -c 'echo ${:+} ; echo moo' SHELL
+
+# now some funky ones.
+# ${V+word} "if V unset, then substitute nothing, else substitute word"
+# ${V:+word} "if V unset or '', then substitute nothing, else substitute word"
+# bash doesn't accept ${#+}. ash prints 0 (not $#).
+echo _${#+}_ _${#:+}_
+# Forms with non-empty word work as expected in both ash and bash.
+echo _${#+z}_ _${#:+z}_
+
+# now some valid ones
+set --
+echo _$1 _${1+} _${1:+} _${1+word} _${1:+word}
+
+set -- aaaa
+echo _$1 _${1+} _${1:+} _${1+word} _${1:+word}
+
+unset f
+echo _$f _${f+} _${f:+} _${f+word} _${f:+word}
+
+f=
+echo _$f _${f+} _${f:+} _${f+word} _${f:+word}
+
+f=fff
+echo _$f _${f+} _${f:+} _${f+word} _${f:+word}
diff --git a/shell/ash_test/ash-vars/param_expand_assign.right b/shell/ash_test/ash-vars/param_expand_assign.right
new file mode 100644
index 0000000..9b07d8c
--- /dev/null
+++ b/shell/ash_test/ash-vars/param_expand_assign.right
@@ -0,0 +1,27 @@
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: bad substitution
+0
+0
+SHELL: line 1: 1: bad variable name
+SHELL: line 1: 1: bad variable name
+SHELL: line 1: 1: bad variable name
+SHELL: line 1: 1: bad variable name
+_aa
+_aa
+_aa
+_aa
+_
+_
+_
+_word
+_word
+_
+_
+_
+_
+_word
+_fff
+_fff
+_fff
+_fff
+_fff
diff --git a/shell/ash_test/ash-vars/param_expand_assign.tests b/shell/ash_test/ash-vars/param_expand_assign.tests
new file mode 100755
index 0000000..79de956
--- /dev/null
+++ b/shell/ash_test/ash-vars/param_expand_assign.tests
@@ -0,0 +1,39 @@
+# First try some invalid patterns. Do in subshell due to parsing error.
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+"$THIS_SH" -c 'echo ${=}' SHELL
+"$THIS_SH" -c 'echo ${:=}' SHELL
+
+# now some funky ones
+"$THIS_SH" -c 'echo ${#=}' SHELL
+"$THIS_SH" -c 'echo ${#:=}' SHELL
+
+# should error out
+"$THIS_SH" -c 'set --; echo _${1=}' SHELL
+"$THIS_SH" -c 'set --; echo _${1:=}' SHELL
+"$THIS_SH" -c 'set --; echo _${1=word}' SHELL
+"$THIS_SH" -c 'set --; echo _${1:=word}' SHELL
+
+# should not error
+"$THIS_SH" -c 'set aa; echo _${1=}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1:=}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1=word}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1:=word}' SHELL
+
+# should work fine
+unset f; echo _$f
+unset f; echo _${f=}
+unset f; echo _${f:=}
+unset f; echo _${f=word}
+unset f; echo _${f:=word}
+
+f=; echo _$f
+f=; echo _${f=}
+f=; echo _${f:=}
+f=; echo _${f=word}
+f=; echo _${f:=word}
+
+f=fff; echo _$f
+f=fff; echo _${f=}
+f=fff; echo _${f:=}
+f=fff; echo _${f=word}
+f=fff; echo _${f:=word}
diff --git a/shell/ash_test/ash-vars/param_expand_bash_substring.right b/shell/ash_test/ash-vars/param_expand_bash_substring.right
new file mode 100644
index 0000000..9ad6dbc
--- /dev/null
+++ b/shell/ash_test/ash-vars/param_expand_bash_substring.right
@@ -0,0 +1,64 @@
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: bad substitution
+SHELL: line 1: syntax error: missing '}'
+1 =||
+1:1 =||
+1:1:2=||
+1::2 =||
+1:1: =||
+1:: =||
+1 =|0123|
+1:1 =|123|
+1:1:2=|12|
+1::2 =|01|
+1:1: =||
+1:: =||
+f =||
+f:1 =||
+f:1:2=||
+f::2 =||
+f:1: =||
+f:: =||
+f =||
+f:1 =||
+f:1:2=||
+f::2 =||
+f:1: =||
+f:: =||
+f =|a|
+f:1 =||
+f:1:2=||
+f::2 =|a|
+f:1: =||
+f:: =||
+f =|0123456789|
+f:1 =|123456789|
+f:1:2=|12|
+f::2 =|01|
+f:1: =||
+f:: =||
+Substrings from special vars
+? =|0|
+?:1 =||
+?:1:2=||
+?::2 =|0|
+?:1: =||
+?:: =||
+# =|11|
+#:1 =|1|
+#:1:2=|1|
+#::2 =|11|
+#:1: =||
+#:: =||
+Substrings with expressions
+f =|01234567|
+f:1+1:2+2 =|2345|
+f:-1:2+2 =|01234567|
+f:1:f =|1234567|
+f:1:$f =|1234567|
+f:1:${f} =|1234567|
+f:1:${f:3:1} =|123|
+f:1:1`echo 1`=|1|
+Done
diff --git a/shell/ash_test/ash-vars/param_expand_bash_substring.tests b/shell/ash_test/ash-vars/param_expand_bash_substring.tests
new file mode 100755
index 0000000..cce9f12
--- /dev/null
+++ b/shell/ash_test/ash-vars/param_expand_bash_substring.tests
@@ -0,0 +1,84 @@
+# first try some invalid patterns
+# do all of these in subshells since it's supposed to error out
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+export var=0123456789
+"$THIS_SH" -c 'echo ${:}' SHELL
+"$THIS_SH" -c 'echo ${::}' SHELL
+"$THIS_SH" -c 'echo ${:1}' SHELL
+"$THIS_SH" -c 'echo ${::1}' SHELL
+
+#this also is not valid in bash, hush accepts it:
+"$THIS_SH" -c 'echo ${var:}' SHELL
+
+# then some funky ones
+# UNFIXED BUG: this should work: "$THIS_SH" -c 'echo ${?:0}'
+
+# now some valid ones
+set --; echo "1 =|${1}|"
+set --; echo "1:1 =|${1:1}|"
+set --; echo "1:1:2=|${1:1:2}|"
+set --; echo "1::2 =|${1::2}|"
+set --; echo "1:1: =|${1:1:}|"
+set --; echo "1:: =|${1::}|"
+
+set -- 0123; echo "1 =|${1}|"
+set -- 0123; echo "1:1 =|${1:1}|"
+set -- 0123; echo "1:1:2=|${1:1:2}|"
+set -- 0123; echo "1::2 =|${1::2}|"
+set -- 0123; echo "1:1: =|${1:1:}|"
+set -- 0123; echo "1:: =|${1::}|"
+
+unset f; echo "f =|$f|"
+unset f; echo "f:1 =|${f:1}|"
+unset f; echo "f:1:2=|${f:1:2}|"
+unset f; echo "f::2 =|${f::2}|"
+unset f; echo "f:1: =|${f:1:}|"
+unset f; echo "f:: =|${f::}|"
+
+f=; echo "f =|$f|"
+f=; echo "f:1 =|${f:1}|"
+f=; echo "f:1:2=|${f:1:2}|"
+f=; echo "f::2 =|${f::2}|"
+f=; echo "f:1: =|${f:1:}|"
+f=; echo "f:: =|${f::}|"
+
+f=a; echo "f =|$f|"
+f=a; echo "f:1 =|${f:1}|"
+f=a; echo "f:1:2=|${f:1:2}|"
+f=a; echo "f::2 =|${f::2}|"
+f=a; echo "f:1: =|${f:1:}|"
+f=a; echo "f:: =|${f::}|"
+
+f=0123456789; echo "f =|$f|"
+f=0123456789; echo "f:1 =|${f:1}|"
+f=0123456789; echo "f:1:2=|${f:1:2}|"
+f=0123456789; echo "f::2 =|${f::2}|"
+f=0123456789; echo "f:1: =|${f:1:}|"
+f=0123456789; echo "f:: =|${f::}|"
+
+echo "Substrings from special vars"
+echo '? '"=|$?|"
+echo '?:1 '"=|${?:1}|"
+echo '?:1:2'"=|${?:1:2}|"
+echo '?::2 '"=|${?::2}|"
+echo '?:1: '"=|${?:1:}|"
+echo '?:: '"=|${?::}|"
+set -- 1 2 3 4 5 6 7 8 9 10 11
+echo '# '"=|$#|"
+echo '#:1 '"=|${#:1}|"
+echo '#:1:2'"=|${#:1:2}|"
+echo '#::2 '"=|${#::2}|"
+echo '#:1: '"=|${#:1:}|"
+echo '#:: '"=|${#::}|"
+
+echo "Substrings with expressions"
+f=01234567; echo 'f '"=|$f|"
+f=01234567; echo 'f:1+1:2+2 '"=|${f:1+1:2+2}|"
+f=01234567; echo 'f:-1:2+2 '"=|${f:-1:2+2}|"
+f=01234567; echo 'f:1:f '"=|${f:1:f}|"
+f=01234567; echo 'f:1:$f '"=|${f:1:$f}|"
+f=01234567; echo 'f:1:${f} '"=|${f:1:${f}}|"
+f=01234567; echo 'f:1:${f:3:1} '"=|${f:1:${f:3:1}}|"
+f=01234567; echo 'f:1:1`echo 1`'"=|${f:1:`echo 1`}|"
+
+echo Done
diff --git a/shell/hush_test/hush-vars/param_expand_alt.right b/shell/hush_test/hush-vars/param_expand_alt.right
index 67f18d6..4f9eb29 100644
--- a/shell/hush_test/hush-vars/param_expand_alt.right
+++ b/shell/hush_test/hush-vars/param_expand_alt.right
@@ -1,6 +1,7 @@
hush: syntax error: unterminated ${name}
hush: syntax error: unterminated ${name}
__ __
+_z_ _z_
_ _ _ _ _
_aaaa _ _ _word _word
_ _ _ _ _
diff --git a/shell/hush_test/hush-vars/param_expand_alt.tests b/shell/hush_test/hush-vars/param_expand_alt.tests
index 3b646b1..c9c4249 100755
--- a/shell/hush_test/hush-vars/param_expand_alt.tests
+++ b/shell/hush_test/hush-vars/param_expand_alt.tests
@@ -1,9 +1,15 @@
-# first try some invalid patterns (do in subshell due to parsing error)
-"$THIS_SH" -c 'echo ${+} ; echo moo'
-"$THIS_SH" -c 'echo ${:+} ; echo moo'
+# First try some invalid patterns. Do in subshell due to parsing error.
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+"$THIS_SH" -c 'echo ${+} ; echo moo' SHELL
+"$THIS_SH" -c 'echo ${:+} ; echo moo' SHELL
-# now some funky ones. (bash doesn't accept ${#+})
+# now some funky ones.
+# ${V+word} "if V unset, then substitute nothing, else substitute word"
+# ${V:+word} "if V unset or '', then substitute nothing, else substitute word"
+# bash doesn't accept ${#+}. ash prints 0 (not $#).
echo _${#+}_ _${#:+}_
+# Forms with non-empty word work as expected in both ash and bash.
+echo _${#+z}_ _${#:+z}_
# now some valid ones
set --
diff --git a/shell/hush_test/hush-vars/param_expand_assign.tests b/shell/hush_test/hush-vars/param_expand_assign.tests
index 149cb20..79de956 100755
--- a/shell/hush_test/hush-vars/param_expand_assign.tests
+++ b/shell/hush_test/hush-vars/param_expand_assign.tests
@@ -1,22 +1,23 @@
-# first try some invalid patterns (do in subshell due to parsing error)
-"$THIS_SH" -c 'echo ${=}'
-"$THIS_SH" -c 'echo ${:=}'
+# First try some invalid patterns. Do in subshell due to parsing error.
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
+"$THIS_SH" -c 'echo ${=}' SHELL
+"$THIS_SH" -c 'echo ${:=}' SHELL
# now some funky ones
-"$THIS_SH" -c 'echo ${#=}'
-"$THIS_SH" -c 'echo ${#:=}'
+"$THIS_SH" -c 'echo ${#=}' SHELL
+"$THIS_SH" -c 'echo ${#:=}' SHELL
# should error out
-"$THIS_SH" -c 'set --; echo _${1=}'
-"$THIS_SH" -c 'set --; echo _${1:=}'
-"$THIS_SH" -c 'set --; echo _${1=word}'
-"$THIS_SH" -c 'set --; echo _${1:=word}'
+"$THIS_SH" -c 'set --; echo _${1=}' SHELL
+"$THIS_SH" -c 'set --; echo _${1:=}' SHELL
+"$THIS_SH" -c 'set --; echo _${1=word}' SHELL
+"$THIS_SH" -c 'set --; echo _${1:=word}' SHELL
# should not error
-"$THIS_SH" -c 'set aa; echo _${1=}'
-"$THIS_SH" -c 'set aa; echo _${1:=}'
-"$THIS_SH" -c 'set aa; echo _${1=word}'
-"$THIS_SH" -c 'set aa; echo _${1:=word}'
+"$THIS_SH" -c 'set aa; echo _${1=}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1:=}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1=word}' SHELL
+"$THIS_SH" -c 'set aa; echo _${1:=word}' SHELL
# should work fine
unset f; echo _$f
diff --git a/shell/hush_test/hush-vars/param_expand_bash_substring.tests b/shell/hush_test/hush-vars/param_expand_bash_substring.tests
index 5c9552d..cce9f12 100755
--- a/shell/hush_test/hush-vars/param_expand_bash_substring.tests
+++ b/shell/hush_test/hush-vars/param_expand_bash_substring.tests
@@ -1,13 +1,14 @@
# first try some invalid patterns
# do all of these in subshells since it's supposed to error out
+# (set argv0 to "SHELL" to avoid "/path/to/shell: blah" in error messages)
export var=0123456789
-"$THIS_SH" -c 'echo ${:}'
-"$THIS_SH" -c 'echo ${::}'
-"$THIS_SH" -c 'echo ${:1}'
-"$THIS_SH" -c 'echo ${::1}'
+"$THIS_SH" -c 'echo ${:}' SHELL
+"$THIS_SH" -c 'echo ${::}' SHELL
+"$THIS_SH" -c 'echo ${:1}' SHELL
+"$THIS_SH" -c 'echo ${::1}' SHELL
-#this also is not valid in bash, but we accept it:
-"$THIS_SH" -c 'echo ${var:}'
+#this also is not valid in bash, hush accepts it:
+"$THIS_SH" -c 'echo ${var:}' SHELL
# then some funky ones
# UNFIXED BUG: this should work: "$THIS_SH" -c 'echo ${?:0}'