Results for assign.test.sh

statusbashmkshkshtoyshsushbrushosh
pass 36333420223544
ok 6700001
N-I 1400000
BUG 2300000
FAIL 20132725122
total47474747474747
casebashmkshkshtoyshsushbrushoshdescription
0pass pass pass FAIL pass pass pass Env value doesn't persist
details
1pass pass pass pass pass pass pass Env value with equals
2pass BUG FAIL pass FAIL pass pass Env binding can use preceding bindings, but not subsequent ones
detailsdetailsdetails
3pass pass pass pass pass pass pass Env value with two quotes
4pass pass pass pass pass pass pass Env value with escaped <
5pass pass pass pass pass pass pass FOO=foo echo [foo]
6pass pass pass pass pass pass pass FOO=foo fun
7pass ok pass pass FAIL pass pass Multiple temporary envs on the stack
detailsdetails
8pass pass pass pass pass pass pass Escaped = in command name
9pass ok FAIL pass pass pass pass Env binding not allowed before compound command
detailsdetails
10pass pass pass pass FAIL FAIL pass Trying to run keyword 'for'
detailsdetails
11pass pass pass pass pass pass pass Empty env binding
12pass pass pass pass pass pass pass Assignment doesn't do word splitting
13pass pass pass FAIL FAIL pass pass Assignment doesn't do glob expansion
detailsdetails
14BUG pass pass FAIL pass FAIL pass Env binding in readonly/declare is NOT exported! (pitfall)
detailsdetailsdetails
15pass pass pass pass pass pass pass assignments / array assignments not interpreted after 'echo'
16ok ok FAIL FAIL FAIL FAIL pass dynamic local variables (and splitting)
detailsdetailsdetailsdetailsdetailsdetails
17pass pass pass pass pass pass pass readonly x= gives empty string (regression)
18pass pass pass FAIL FAIL FAIL pass 'local x' does not set variable
detailsdetailsdetails
19pass pass pass FAIL FAIL FAIL pass 'local -a x' does not set variable
detailsdetailsdetails
20pass pass pass FAIL pass pass pass 'local x' and then array assignment
details
21pass N-I FAIL FAIL pass pass pass 'declare -A' and then dict assignment
detailsdetailsdetails
22pass pass pass FAIL pass pass pass declare in an if statement
details
23pass pass pass pass pass pass pass Modify a temporary binding
24FAIL BUG FAIL FAIL FAIL FAIL pass Reveal existence of "temp frame" (All shells disagree here!!!)
detailsdetailsdetailsdetailsdetailsdetails
25pass BUG pass FAIL FAIL pass pass Test above without 'local' (which is not POSIX)
detailsdetailsdetails
26ok pass pass FAIL FAIL FAIL pass Using ${x-default} after unsetting local shadowing a global
detailsdetailsdetailsdetails
27FAIL pass FAIL FAIL FAIL FAIL pass Using ${x-default} after unsetting a temp binding shadowing a global
detailsdetailsdetailsdetailsdetails
28pass pass pass FAIL pass pass pass static assignment doesn't split
details
29pass pass pass FAIL FAIL pass pass aliased assignment doesn't split
detailsdetails
30ok ok FAIL FAIL FAIL pass pass assignment using dynamic keyword (splits in most shells, not in zsh/osh)
detailsdetailsdetailsdetailsdetails
31ok ok FAIL FAIL FAIL FAIL pass assignment using dynamic var names doesn't split
detailsdetailsdetailsdetailsdetailsdetails
32pass pass pass FAIL FAIL pass pass assign and glob
detailsdetails
33pass pass pass FAIL FAIL pass pass declare and glob
detailsdetails
34ok ok FAIL FAIL FAIL FAIL pass readonly $x where x='b c'
detailsdetailsdetailsdetailsdetailsdetails
35pass pass pass FAIL pass pass pass readonly a=(1 2) no_value c=(3 4) makes 'no_value' readonly
details
36pass pass pass pass pass pass pass export a=1 no_value c=2
37pass pass pass pass FAIL pass pass local a=loc $var c=loc
details
38pass pass pass pass FAIL pass FAIL redirect after assignment builtin (what's going on with dash/bash/mksh here?)
detailsdetails
39pass pass pass pass pass pass FAIL redirect after command sub (like case above but without assignment builtin)
details
40BUG pass pass pass FAIL pass pass redirect after bare assignment
detailsdetails
41ok pass pass FAIL FAIL FAIL ok redirect after declare -p
detailsdetailsdetailsdetailsdetails
42pass pass pass FAIL pass pass pass declare -a arr does not remove existing arrays (OSH regression)
details
43pass N-I FAIL FAIL FAIL pass pass declare -A dict does not remove existing arrays (OSH regression)
detailsdetailsdetailsdetails
44pass N-I FAIL FAIL FAIL pass pass "readonly -a arr" and "readonly -A dict" should not not remove existing arrays
detailsdetailsdetailsdetails
45N-I N-I FAIL FAIL FAIL FAIL pass "declare -a arr" and "readonly -a a" creates an empty array (OSH)
detailsdetailsdetailsdetailsdetailsdetails
46pass ok FAIL FAIL FAIL pass pass readonly array should not be modified by a+=(1)
detailsdetailsdetailsdetails
224 passed, 14 OK, 5 not implemented, 5 BUG, 81 failed, 0 timeouts, 0 cases skipped
2 failed under osh

Details on runs that didn't PASS

toysh0 Env value doesn't persist

[toysh stdout] Expected 'foo\n--\n', got 'foo\n\n'

stdout:
foo

stderr:
mksh2 Env binding can use preceding bindings, but not subsequent ones

stdout:
foo
[][]
baz
stderr:
ksh2 Env binding can use preceding bindings, but not subsequent ones

[ksh stdout] Expected 'foo\n[foo][]\nbaz\n', got 'foo\n[][]\nbaz\n'

stdout:
foo
[][]
baz
stderr:
sush2 Env binding can use preceding bindings, but not subsequent ones

[sush stdout] Expected 'foo\n[foo][]\nbaz\n', got 'foo\n[foo][baz]\nbaz\n'

stdout:
foo
[foo][baz]
baz
stderr:
mksh7 Multiple temporary envs on the stack

stdout:
f [] [A]
--- g() ---
f
[]
[A]
None
p
--- f() ---
f
[]
[A]
None
None
stderr:
sush7 Multiple temporary envs on the stack

[sush stdout] Expected 'f [] [A]\n--- g() ---\nf\n[]\n[A]\nNone\np\n--- f() ---\nf\nNone\nNone\nNone\nNone\n' Got 'f [] [A]\n--- g() ---\nNone\nNone\nNone\nNone\np\n--- f() ---\nNone\nNone\nNone\nNone\nNone\n'

stdout:
f [] [A]
--- g() ---
None
None
None
None
p
--- f() ---
None
None
None
None
None
stderr:
mksh9 Env binding not allowed before compound command

stdout:
stderr: 
mksh: <stdin>[1]: syntax error: 'do' unexpected
ksh9 Env binding not allowed before compound command

[ksh status] Expected 2, got 1

stdout:
stderr: 
E: ksh: <stdin>[1]: syntax error: unexpected 'do'
sush10 Trying to run keyword 'for'

[sush status] Expected 127, got 0

stdout:
stderr: 
brush10 Trying to run keyword 'for'

[brush status] Expected 127, got 2

stdout:
stderr: 
ERROR main: syntax error near token `
' (line 1 col 12)
toysh13 Assignment doesn't do glob expansion

[toysh stdout] Expected "['_tmp/*.Z']\n", got "['_tmp/z.Z', '_tmp/zz.Z']\n"

stdout:
['_tmp/z.Z', '_tmp/zz.Z']
stderr:
sush13 Assignment doesn't do glob expansion

[sush stdout] Expected "['_tmp/*.Z']\n", got "['_tmp/z.Z _tmp/zz.Z']\n"

stdout:
['_tmp/z.Z _tmp/zz.Z']
stderr:
bash14 Env binding in readonly/declare is NOT exported! (pitfall)

stdout:
v=None
v2=
stderr:
toysh14 Env binding in readonly/declare is NOT exported! (pitfall)

[toysh stdout] Expected 'v=None\nv2=foo\n', got 'v=\nv2=\n'

stdout:
v=
v2=
stderr:
sh: readonly: No such file or directory
sh: readonly: No such file or directory
brush14 Env binding in readonly/declare is NOT exported! (pitfall)

[brush stdout] Expected 'v=None\nv2=foo\n', got 'v=None\nv2=\n'

stdout:
v=None
v2=
stderr:
bash16 dynamic local variables (and splitting)

stdout:
x='y a=b'
a=''
x='y'
a='b'
stderr:
mksh16 dynamic local variables (and splitting)

stdout:
x='y a=b'
a=''
x='y'
a='b'
stderr:
ksh16 dynamic local variables (and splitting)

[ksh stdout] Expected "x='y a=b'\na=''\nx='y a=b'\na=''\n", got "x='y a=b'\na=''\nx='y'\na='b'\n"

stdout:
x='y a=b'
a=''
x='y'
a='b'
stderr:
toysh16 dynamic local variables (and splitting)

[toysh stdout] Expected "x='y a=b'\na=''\nx='y a=b'\na=''\n", got "x='y a=b'\na=''\nx='y a=b'\na='b'\n"

stdout:
x='y a=b'
a=''
x='y a=b'
a='b'
stderr:
sush16 dynamic local variables (and splitting)

[sush stdout] Expected "x='y a=b'\na=''\nx='y a=b'\na=''\n", got "x=''\na=''\nx=''\na=''\n"

stdout:
x=''
a=''
x=''
a=''
stderr:
brush16 dynamic local variables (and splitting)

[brush stdout] Expected "x='y a=b'\na=''\nx='y a=b'\na=''\n", got "x=''\na=''\nx=''\na=''\n"

stdout:
x=''
a=''
x=''
a=''
stderr:
toysh18 'local x' does not set variable

[toysh status] Expected 1, got 0

stdout:
stderr: 
set: bad -o nounset
sush18 'local x' does not set variable

[sush status] Expected 1, got 0

stdout:
stderr: 
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 1: set: nounset: invalid option name
brush18 'local x' does not set variable

[brush status] Expected 1, got 0

stdout:
stderr: 
toysh19 'local -a x' does not set variable

[toysh status] Expected 1, got 0

stdout:
stderr: 
set: bad -o nounset
local: bad -a
sush19 'local -a x' does not set variable

[sush status] Expected 1, got 0

stdout:
stderr: 
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 1: set: nounset: invalid option name
brush19 'local -a x' does not set variable

[brush status] Expected 1, got 0

stdout:
stderr: 
toysh20 'local x' and then array assignment

[toysh stdout] Expected 'foo\n', got '\n'

stdout:
stderr: 
sh: x[3]=foo: No such file or directory
mksh21 'declare -A' and then dict assignment

stdout:
stderr: 
mksh: <stdin>[1]: declare: not found
mksh: <stdin>[3]: "bar": unexpected '"'
ksh21 'declare -A' and then dict assignment

[ksh stdout] Expected 'value\n', got ''
[ksh status] Expected 0, got 1

stdout:
stderr: 
E: ksh: <stdin>[1]: declare: inaccessible or not found
W: ksh: <stdin>[3]: "bar": unexpected '"'
toysh21 'declare -A' and then dict assignment

[toysh stdout] Expected 'value\n', got '\n'

stdout:
stderr: 
sh: foo[bar]=value: No such file or directory
toysh22 declare in an if statement

[toysh stdout] Expected 'bar\neggs\n', got 'HI\n\nBAD\neggs\n'

stdout:
HI

BAD
eggs
stderr:
bash24 Reveal existence of "temp frame" (All shells disagree here!!!)

[bash stdout] Expected 'x=temp-binding\nx=mutated-temp\nx=local\nx=global\nx=global\n' Got 'x=temp-binding\nx=mutated-temp\nx=local\nx=\nx=global\n'

stdout:
x=temp-binding
x=mutated-temp
x=local
x=
x=global
stderr:
mksh24 Reveal existence of "temp frame" (All shells disagree here!!!)

stdout:
x=temp-binding
x=mutated-temp
x=local
x=mutated-temp
x=mutated-temp
stderr:
ksh24 Reveal existence of "temp frame" (All shells disagree here!!!)

[ksh stdout] Expected 'x=temp-binding\nx=mutated-temp\nx=local\nx=mutated-temp\nx=global\n' Got 'x=temp-binding\nx=mutated-temp\nx=local\nx=global\nx=global\n'

stdout:
x=temp-binding
x=mutated-temp
x=local
x=global
x=global
stderr:
toysh24 Reveal existence of "temp frame" (All shells disagree here!!!)

[toysh stdout] Expected 'x=temp-binding\nx=mutated-temp\nx=local\nx=mutated-temp\nx=global\n' Got 'x=temp-binding\nx=mutated-temp\nx=local\nx=\nx=mutated-temp\n'

stdout:
x=temp-binding
x=mutated-temp
x=local
x=
x=mutated-temp
stderr:
sush24 Reveal existence of "temp frame" (All shells disagree here!!!)

[sush stdout] Expected 'x=temp-binding\nx=mutated-temp\nx=local\nx=mutated-temp\nx=global\n' Got 'x=temp-binding\nx=mutated-temp\nx=local\nx=\nx=\n'

stdout:
x=temp-binding
x=mutated-temp
x=local
x=
x=
stderr:
brush24 Reveal existence of "temp frame" (All shells disagree here!!!)

[brush stdout] Expected 'x=temp-binding\nx=mutated-temp\nx=local\nx=mutated-temp\nx=global\n' Got 'x=temp-binding\nx=mutated-temp\nx=local\nx=\nx=global\n'

stdout:
x=temp-binding
x=mutated-temp
x=local
x=
x=global
stderr:
mksh25 Test above without 'local' (which is not POSIX)

stdout:
x=temp-binding
x=mutated-temp
x=
x=
stderr:
toysh25 Test above without 'local' (which is not POSIX)

[toysh stdout] Expected 'x=temp-binding\nx=mutated-temp\nx=global\nx=global\n' Got 'x=temp-binding\nx=mutated-temp\nx=\nx=\n'

stdout:
x=temp-binding
x=mutated-temp
x=
x=
stderr:
sush25 Test above without 'local' (which is not POSIX)

[sush stdout] Expected 'x=temp-binding\nx=mutated-temp\nx=global\nx=global\n' Got 'x=temp-binding\nx=mutated-temp\nx=\nx=\n'

stdout:
x=temp-binding
x=mutated-temp
x=
x=
stderr:
bash26 Using ${x-default} after unsetting local shadowing a global

stdout:
x=global
x=local
- operator = default
:- operator = default
stderr:
toysh26 Using ${x-default} after unsetting local shadowing a global

[toysh stdout] Expected 'x=global\nx=local\n- operator = global\n:- operator = global\n' Got 'x=global\nx=local\n- operator = default\n:- operator = default\n'

stdout:
x=global
x=local
- operator = default
:- operator = default
stderr:
sush26 Using ${x-default} after unsetting local shadowing a global

[sush stdout] Expected 'x=global\nx=local\n- operator = global\n:- operator = global\n' Got 'x=global\nx=local\n- operator = default\n:- operator = default\n'

stdout:
x=global
x=local
- operator = default
:- operator = default
stderr:
brush26 Using ${x-default} after unsetting local shadowing a global

[brush stdout] Expected 'x=global\nx=local\n- operator = global\n:- operator = global\n' Got 'x=global\nx=local\n- operator = default\n:- operator = default\n'

stdout:
x=global
x=local
- operator = default
:- operator = default
stderr:
bash27 Using ${x-default} after unsetting a temp binding shadowing a global

[bash stdout] Expected 'x=temp-binding\nx=local\n- operator = global\n:- operator = global\n' Got 'x=temp-binding\nx=local\n- operator = default\n:- operator = default\n'

stdout:
x=temp-binding
x=local
- operator = default
:- operator = default
stderr:
ksh27 Using ${x-default} after unsetting a temp binding shadowing a global

[ksh stdout] Expected 'x=temp-binding\nx=local\n- operator = temp-binding\n:- operator = temp-binding\n' Got 'x=temp-binding\nx=local\n- operator = global\n:- operator = global\n'

stdout:
x=temp-binding
x=local
- operator = global
:- operator = global
stderr:
toysh27 Using ${x-default} after unsetting a temp binding shadowing a global

[toysh stdout] Expected 'x=temp-binding\nx=local\n- operator = temp-binding\n:- operator = temp-binding\n' Got 'x=temp-binding\nx=local\n- operator = default\n:- operator = default\n'

stdout:
x=temp-binding
x=local
- operator = default
:- operator = default
stderr:
sush27 Using ${x-default} after unsetting a temp binding shadowing a global

[sush stdout] Expected 'x=temp-binding\nx=local\n- operator = temp-binding\n:- operator = temp-binding\n' Got 'x=temp-binding\nx=local\n- operator = default\n:- operator = default\n'

stdout:
x=temp-binding
x=local
- operator = default
:- operator = default
stderr:
brush27 Using ${x-default} after unsetting a temp binding shadowing a global

[brush stdout] Expected 'x=temp-binding\nx=local\n- operator = temp-binding\n:- operator = temp-binding\n' Got 'x=temp-binding\nx=local\n- operator = default\n:- operator = default\n'

stdout:
x=temp-binding
x=local
- operator = default
:- operator = default
stderr:
toysh28 static assignment doesn't split

[toysh stdout] Expected "['a b c', 'a b c', 'a b c']\n", got "['a', 'a b c', '']\n"

stdout:
['a', 'a b c', '']
stderr:
sh: readonly: No such file or directory
toysh29 aliased assignment doesn't split

[toysh stdout] Expected "['a b c', 'a b c']\n", got "['', '']\n"

stdout:
['', '']
stderr:
sh: shopt: No such file or directory
sh: alias: No such file or directory
sh: alias: No such file or directory
sh: e: No such file or directory
sh: r: No such file or directory
sush29 aliased assignment doesn't split

[sush stdout] Expected "['a b c', 'a b c']\n", got 'declare -ar BASH_VERSINFO=([0]="1" [1]="1" [2]="8" [3]="rusty_bash" [4]="release" [5]="x86_64-unknown-linux")\ndeclare -r UID=1000\n[\'\', \'\']\n'

stdout:
declare -ar BASH_VERSINFO=([0]="1" [1]="1" [2]="8" [3]="rusty_bash" [4]="release" [5]="x86_64-unknown-linux")
declare -r UID=1000
['', '']
stderr:
bash30 assignment using dynamic keyword (splits in most shells, not in zsh/osh)

stdout:
['a', 'a']
stderr:
mksh30 assignment using dynamic keyword (splits in most shells, not in zsh/osh)

stdout:
['a', 'a']
stderr:
ksh30 assignment using dynamic keyword (splits in most shells, not in zsh/osh)

[ksh stdout] Expected "['a b c', 'a b c']\n", got "['a', 'a']\n"

stdout:
['a', 'a']
stderr:
toysh30 assignment using dynamic keyword (splits in most shells, not in zsh/osh)

[toysh stdout] Expected "['a b c', 'a b c']\n", got "['a', '']\n"

stdout:
['a', '']
stderr:
sh: readonly: No such file or directory
sush30 assignment using dynamic keyword (splits in most shells, not in zsh/osh)

[sush stdout] Expected "['a b c', 'a b c']\n", got 'declare -ar BASH_VERSINFO=([0]="1" [1]="1" [2]="8" [3]="rusty_bash" [4]="release" [5]="x86_64-unknown-linux")\ndeclare -r UID=1000\n[\'\', \'\']\n'

stdout:
declare -ar BASH_VERSINFO=([0]="1" [1]="1" [2]="8" [3]="rusty_bash" [4]="release" [5]="x86_64-unknown-linux")
declare -r UID=1000
['', '']
stderr:
bash31 assignment using dynamic var names doesn't split

stdout:
['a', 'a']
['a b c', 'a b c']
stderr:
mksh31 assignment using dynamic var names doesn't split

stdout:
['a', 'a']
['a b c', 'a b c']
stderr:
ksh31 assignment using dynamic var names doesn't split

[ksh stdout] Expected "['a b c', 'a b c']\n['a b c', 'a b c']\n", got "['a', 'a']\n['a b c', 'a b c']\n"

stdout:
['a', 'a']
['a b c', 'a b c']
stderr:
toysh31 assignment using dynamic var names doesn't split

[toysh stdout] Expected "['a b c', 'a b c']\n['a b c', 'a b c']\n", got "['a', '']\n['a b c', '']\n"

stdout:
['a', '']
['a b c', '']
stderr:
sh: readonly: No such file or directory
sh: readonly: No such file or directory
sush31 assignment using dynamic var names doesn't split

[sush stdout] Expected "['a b c', 'a b c']\n['a b c', 'a b c']\n", got 'declare -ar BASH_VERSINFO=([0]="1" [1]="1" [2]="8" [3]="rusty_bash" [4]="release" [5]="x86_64-unknown-linux")\ndeclare -r UID=1000\n[\'\', \'\']\ndeclare -ar BASH_VERSINFO=([0]="1" [1]="1" [2]="8" [3]="rusty_bash" [4]="release" [5]="x86_64-unknown-linux")\ndeclare -r UID=1000\n[\'\', \'\']\n'

stdout:
declare -ar BASH_VERSINFO=([0]="1" [1]="1" [2]="8" [3]="rusty_bash" [4]="release" [5]="x86_64-unknown-linux")
declare -r UID=1000
['', '']
declare -ar BASH_VERSINFO=([0]="1" [1]="1" [2]="8" [3]="rusty_bash" [4]="release" [5]="x86_64-unknown-linux")
declare -r UID=1000
['', '']
stderr:
brush31 assignment using dynamic var names doesn't split

[brush stdout] Expected "['a b c', 'a b c']\n['a b c', 'a b c']\n", got "['', '']\n['', '']\n"

stdout:
['', '']
['', '']
stderr:
toysh32 assign and glob

[toysh stdout] Expected "['*']\n['*']\n", got "['_tmp', 'foo=a', 'foo=b']\n['b']\n"

stdout:
['_tmp', 'foo=a', 'foo=b']
['b']
stderr:
sush32 assign and glob

[sush stdout] Expected "['*']\n['*']\n", got "['_tmp foo=a foo=b']\n['_tmp foo=a foo=b']\n"

stdout:
['_tmp foo=a foo=b']
['_tmp foo=a foo=b']
stderr:
toysh33 declare and glob

[toysh stdout] Expected "['*']\n", got "['']\n"

stdout:
['']
stderr:
sh: typeset: No such file or directory
sush33 declare and glob

[sush stdout] Expected "['*']\n", got "['_tmp foo=a foo=b']\n"

stdout:
['_tmp foo=a foo=b']
stderr:
bash34 readonly $x where x='b c'

stdout:
status=1
status=1
status=1
stderr:
bash: line 4: a: readonly variable
bash: line 6: b: readonly variable
bash: line 8: c: readonly variable
mksh34 readonly $x where x='b c'

stdout:
stderr: 
mksh: <stdin>[4]: read-only: a
ksh34 readonly $x where x='b c'

[ksh status] Expected 1, got 2

stdout:
stderr: 
E: ksh: <stdin>[4]: read-only: a
toysh34 readonly $x where x='b c'

[toysh stdout] Expected u'', got 'status=0\nstatus=0\nstatus=0\n'
[toysh status] Expected 1, got 0

stdout:
status=0
status=0
status=0
stderr:
sh: readonly: No such file or directory
sush34 readonly $x where x='b c'

[sush stdout] Expected u'', got 'declare -ar BASH_VERSINFO=([0]="1" [1]="1" [2]="8" [3]="rusty_bash" [4]="release" [5]="x86_64-unknown-linux")\ndeclare -r UID=1000\nstatus=0\nstatus=0\nstatus=0\n'
[sush status] Expected 1, got 0

stdout:
declare -ar BASH_VERSINFO=([0]="1" [1]="1" [2]="8" [3]="rusty_bash" [4]="release" [5]="x86_64-unknown-linux")
declare -r UID=1000
status=0
status=0
status=0
stderr:
brush34 readonly $x where x='b c'

[brush stdout] Expected u'', got 'status=1\nstatus=1\nstatus=1\n'
[brush status] Expected 1, got 0

stdout:
status=1
status=1
status=1
stderr:
ERROR error: cannot mutate readonly variable
ERROR error: cannot mutate readonly variable
ERROR error: cannot mutate readonly variable
toysh35 readonly a=(1 2) no_value c=(3 4) makes 'no_value' readonly

[toysh status] Expected 1, got 2

stdout:
stderr: 
main: line 1: sh: syntax error: )
sush37 local a=loc $var c=loc

[sush stdout] Expected "global\n['loc', '', 'loc']\n", got "global\n['loc', 'global', 'loc']\n"

stdout:
global
['loc', 'global', 'loc']
stderr:
sush38 redirect after assignment builtin (what's going on with dash/bash/mksh here?)

[sush stderr] Expected 'STDERR\n', got ''

stdout:
done
stderr:
osh38 redirect after assignment builtin (what's going on with dash/bash/mksh here?)

[osh stderr] Expected 'STDERR\n', got ''

stdout:
done
stderr:
osh39 redirect after command sub (like case above but without assignment builtin)

[osh stderr] Expected 'STDERR\n', got ''

stdout:
stdout=STDOUT
stderr:
bash40 redirect after bare assignment

stdout:
done
stderr:
STDERR
sush40 redirect after bare assignment

[sush stderr] Expected u'', got 'STDERR\n'

stdout:
done
stderr:
STDERR
bash41 redirect after declare -p

stdout:
stderr: 
declare -- foo="bar"
toysh41 redirect after declare -p

[toysh stderr] Expected 'typeset foo=bar\n', got 'munmap_chunk(): invalid pointer\n'
[toysh status] Expected 0, got -6

stdout:
stderr: 
munmap_chunk(): invalid pointer
sush41 redirect after declare -p

[sush stderr] Expected 'typeset foo=bar\n', got 'declare -- foo=bar\n'

stdout:
stderr: 
declare -- foo=bar
brush41 redirect after declare -p

[brush stderr] Expected 'typeset foo=bar\n', got 'declare -- foo="bar"\n'

stdout:
stderr: 
declare -- foo="bar"
osh41 redirect after declare -p

stdout:
stderr: 
declare -- foo=bar
toysh42 declare -a arr does not remove existing arrays (OSH regression)

[toysh stdout] Expected 'arr:3\n', got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
main: line 1: sh: syntax error: (
mksh43 declare -A dict does not remove existing arrays (OSH regression)

stdout:
stderr: 
ksh43 declare -A dict does not remove existing arrays (OSH regression)

[ksh stdout] Expected 'dict:3\n', got ''
[ksh status] Expected 0, got 1

stdout:
stderr: 
E: ksh: <stdin>[3]: declare: inaccessible or not found
W: ksh: <stdin>[4]: 'foo': multi-character character constant
toysh43 declare -A dict does not remove existing arrays (OSH regression)

[toysh stdout] Expected 'dict:3\n', got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
main: line 1: sh: syntax error: (
sush43 declare -A dict does not remove existing arrays (OSH regression)

[sush stdout] Expected 'dict:3\n', got 'dict:0\n'

stdout:
dict:0
stderr:
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 4: 'foo': syntax error: operand expected (error token is "'foo'")
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 5: 'bar': syntax error: operand expected (error token is "'bar'")
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 6: 'baz': syntax error: operand expected (error token is "'baz'")
mksh44 "readonly -a arr" and "readonly -A dict" should not not remove existing arrays

stdout:
stderr: 
ksh44 "readonly -a arr" and "readonly -A dict" should not not remove existing arrays

[ksh stdout] Expected 'arr:3\ndict:3\n', got ''
[ksh status] Expected 0, got 1

stdout:
stderr: 
E: ksh: <stdin>[3]: declare: inaccessible or not found
E: ksh: <stdin>[5]: declare: inaccessible or not found
W: ksh: <stdin>[6]: 'foo': multi-character character constant
toysh44 "readonly -a arr" and "readonly -A dict" should not not remove existing arrays

[toysh stdout] Expected 'arr:3\ndict:3\n', got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
main: line 1: sh: syntax error: (
sush44 "readonly -a arr" and "readonly -A dict" should not not remove existing arrays

[sush stdout] Expected 'arr:3\ndict:3\n', got 'arr:3\ndict:0\n'

stdout:
arr:3
dict:0
stderr:
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 6: 'foo': syntax error: operand expected (error token is "'foo'")
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 7: 'bar': syntax error: operand expected (error token is "'bar'")
/home/andy/git/oils-for-unix/oils/../../shells/rusty_bash/target/release/sush: line 8: 'baz': syntax error: operand expected (error token is "'baz'")
bash45 "declare -a arr" and "readonly -a a" creates an empty array (OSH)

stdout:
declare -a arr1
declare -r arr2
declare -A dict1
declare -r dict2
stderr:
mksh45 "declare -a arr" and "readonly -a a" creates an empty array (OSH)

stdout:
stderr: 
ksh45 "declare -a arr" and "readonly -a a" creates an empty array (OSH)

[ksh stdout] Expected 'declare -a arr1=()\ndeclare -ra arr2=()\ndeclare -A dict1=()\ndeclare -rA dict2=()\n' Got ''
[ksh status] Expected 0, got 1

stdout:
stderr: 
E: ksh: <stdin>[3]: declare: inaccessible or not found
E: ksh: <stdin>[4]: readonly: -a: unknown option
toysh45 "declare -a arr" and "readonly -a a" creates an empty array (OSH)

[toysh stdout] Expected 'declare -a arr1=()\ndeclare -ra arr2=()\ndeclare -A dict1=()\ndeclare -rA dict2=()\n' Got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
main: line 1: sh: syntax error: (
sush45 "declare -a arr" and "readonly -a a" creates an empty array (OSH)

[sush stdout] Expected 'declare -a arr1=()\ndeclare -ra arr2=()\ndeclare -A dict1=()\ndeclare -rA dict2=()\n' Got 'declare -a arr1\ndeclare -ar arr2\ndeclare -A dict1\ndeclare -Ar dict2\n'

stdout:
declare -a arr1
declare -ar arr2
declare -A dict1
declare -Ar dict2
stderr:
brush45 "declare -a arr" and "readonly -a a" creates an empty array (OSH)

[brush stdout] Expected 'declare -a arr1=()\ndeclare -ra arr2=()\ndeclare -A dict1=()\ndeclare -rA dict2=()\n' Got 'declare -a arr1\ndeclare -ar arr2\ndeclare -A dict1\ndeclare -Ar dict2\n'

stdout:
declare -a arr1
declare -ar arr2
declare -A dict1
declare -Ar dict2
stderr:
mksh46 readonly array should not be modified by a+=(1)

stdout:
stderr: 
mksh: <stdin>[4]: readonly: -a: unknown option
ksh46 readonly array should not be modified by a+=(1)

[ksh stdout] Expected "['1', '2', '3']\n['1', '2', '3']\n", got ''
[ksh status] Expected 0, got 1

stdout:
stderr: 
E: ksh: <stdin>[4]: readonly: -a: unknown option
toysh46 readonly array should not be modified by a+=(1)

[toysh stdout] Expected "['1', '2', '3']\n['1', '2', '3']\n", got ''
[toysh status] Expected 0, got 2

stdout:
stderr: 
main: line 1: sh: syntax error: (
sush46 readonly array should not be modified by a+=(1)

[sush stdout] Expected "['1', '2', '3']\n['1', '2', '3']\n", got '[]\n[]\n'

stdout:
[]
[]
stderr: