I can recreate your problem, but it looks to me like a bug in ksh. ksh complains that 'local can only be used in a function, when as shown below it *is* being used in a function.'
My suggestion is to file a bug with ksh2020.
root@focal1:~# ksh -c 'foo() { local a=1; echo $?; }; foo'
ksh: local: local can only be used in a function
1
root@focal1:~# ksh2020 -c 'foo() { local a; echo $?; }; foo'
ksh2020: local: local can only be used in a function
1
also oddly, ksh seems to report itself in '$SHELL' as /bin/sh.
root@focal1:~# /usr/bin/ksh2020 -c 'foo() { local a=1; echo $?; }; echo $SHELL; foo'
/bin/sh
/usr/bin/ksh2020: local: local can only be used in a function
1
@Eli,
I can recreate your problem, but it looks to me like a bug in ksh. ksh complains that 'local can only be used in a function, when as shown below it *is* being used in a function.'
My suggestion is to file a bug with ksh2020.
root@focal1:~# ksh -c 'foo() { local a=1; echo $?; }; foo'
ksh: local: local can only be used in a function
1
root@focal1:~# ksh2020 -c 'foo() { local a; echo $?; }; foo'
ksh2020: local: local can only be used in a function
1
also oddly, ksh seems to report itself in '$SHELL' as /bin/sh.
root@focal1:~# /usr/bin/ksh2020 -c 'foo() { local a=1; echo $?; }; echo $SHELL; foo'
/bin/sh
/usr/bin/ksh2020: local: local can only be used in a function
1