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 # these should all fail (despite the same value being assigned) # bash does not abort even in non-interactive more (in script) true a=A echo Fail:$?; true readonly a=A echo Fail:$?; true export a=A echo Fail:$?; true a=A echo Visible:$? # command still runs unset a echo Fail:$?; true