ash: add a few tests from hush-vars/*

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-07-25 14:55:05 +02:00
parent 73c47f6c41
commit 64925384c9
10 changed files with 283 additions and 23 deletions

View File

@ -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

View File

@ -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}

View File

@ -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

View File

@ -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}

View File

@ -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

View File

@ -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

View File

@ -1,6 +1,7 @@
hush: syntax error: unterminated ${name}
hush: syntax error: unterminated ${name}
__ __
_z_ _z_
_ _ _ _ _
_aaaa _ _ _word _word
_ _ _ _ _

View File

@ -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 --

View File

@ -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

View File

@ -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}'