--- /dev/null
+readonly a='A'
+readonly b='B'
+Ok:0
+
+./readonly0.tests: line 19: a: is read only
+Fail:2
+./readonly0.tests: readonly: line 21: a: is read only
+Fail:2
+
+./readonly0.tests: export: line 27: a: is read only
+Fail:2
+
+Fail:1
--- /dev/null
+unset a b
+#
+readonly a=A
+b=B
+readonly b
+# readonly on already readonly var is harmless:
+readonly b a
+readonly | grep '^readonly [ab]='
+# this should work:
+export a b
+export -n a b
+echo Ok:$?
+env | grep -e^a= -e^b= # shows nothing
+
+echo
+# these should all fail (despite the same value being assigned)
+# bash does not abort even in non-interactive more (in script)
+# ash does, using subshell to continue
+true; (a=A)
+echo Fail:$?
+true; (readonly a=A)
+echo Fail:$?
+
+echo
+# in bash, assignment in export fails, but export succeeds! :)
+# we don't mimic that!
+true; (export a=Z)
+echo Fail:$?
+#env | grep '^a='
+#echo "^^^a is exported"
+export -n a # undo that bashism, if it happens
+
+## ash: assignment errors in "a=Z CMD" lead to CMD not executed
+## echo
+## export b
+## # this fails to both set and export a:
+## a=Z env | echo grep '^[ab]='
+## echo "^^^a is not exported"
+## # but external command does get executed, and $? is not mangled (stays 42):
+## (exit 42); a=Z env echo Visible:$?
+
+echo
+# ash: this fails *silently*, bug? bash says "cannot unset: readonly variable"
+true; unset a
+echo Fail:$?
readonly bla=123
# Bare "eval bla=123" should abort ("eval" is a special builtin):
(eval bla=123 2>/dev/null; echo BUG)
-echo One:$?
+echo Fail:$?
# "command BLTIN" disables "special-ness", should not abort:
command eval bla=123 2>/dev/null
-echo One:$?
+echo Fail:$?