Shouldn't readonly (-r) prevent type changes?
Philippe Altherr <[email protected]> Sat, 25 Jul 2026 16:18:07 +0200
| Newsgroups | gmane.comp.shells.zsh.devel |
|---|---|
| Message-ID | <CAGdYchuy8pgfohz0aqeV60e0Yu8Z_548n8jD20b86NHtZtoE5Q@mail.gmail.com> |
--0000000000001cc4640657702905
Content-Type: text/plain; charset="UTF-8"
When a parameters is read-only (-r), it's value can't be changed, not even
with a typeset:
% () { typeset -r var=1; typeset var=2 }
(anon): read-only variable: var
% () { typeset -r -i var=1; typeset -i var=2 }
(anon): read-only variable: var
% () { typeset -r -a var=(1); typeset -a var=(2) }
(anon): read-only variable: var
Shouldn't that restriction extend to type changes?
% () { typeset -r var=1; typeset -i var=2; typeset -p var }
typeset -ir var=2
% () { typeset -r -i var=1; typeset +i var=2; typeset -p var }
typeset -r var=2
% () { typeset -r -i var=1; typeset -a var; typeset -p var }
typeset -ar var=( )
% () { typeset -r -a var=(1); typeset -i var; typeset -p var }
typeset -ir var=0
Bash seems to forbid all type changes for read-only parameters, while ksh
prevents most, sometimes without any error message, and allows some like
"typeset -r -i var; typeset -a var", which creates a read-only array of
integers.
Philippe
--0000000000001cc4640657702905
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">When a parameters=C2=A0is read-only=C2=A0(-r), it's va=
lue can't be changed, not even with a typeset:<div><br></div><div><font=
face=3D"monospace">% () { typeset -r var=3D1; typeset var=3D2 }<br>(anon):=
read-only variable: var<br>% () { typeset -r -i var=3D1; typeset -i var=3D=
2 }<br>(anon): read-only variable: var<br>% () { typeset -r -a var=3D(1); t=
ypeset -a var=3D(2) }<br>(anon): read-only variable: var</font><br></div><d=
iv><br></div><div>Shouldn't that restriction extend to type changes?</d=
iv><div><br></div><div><font face=3D"monospace">% () { typeset -r var=3D1; =
typeset -i var=3D2; typeset -p var }<br>typeset -ir var=3D2<br>% () { types=
et -r -i var=3D1; typeset +i var=3D2; typeset -p var }<br>typeset -r var=3D=
2<br>% () { typeset -r -i var=3D1; typeset -a var; typeset -p var } <br>typ=
eset -ar var=3D( =C2=A0)<br>% () { typeset -r -a var=3D(1); typeset -i var;=
typeset -p var }<br>typeset -ir var=3D0</font><br></div><div><br></div><di=
v>Bash seems to forbid all type changes for read-only parameters, while ksh=
prevents most, sometimes without any error message, and allows some like &=
quot;typeset -r -i var; typeset -a var", which creates a read-only arr=
ay of integers.</div><div><br></div><div>Philippe</div><div><br></div></div=
>
--0000000000001cc4640657702905--