O problema é que typeset
cria o status de retorno. Este código (ou seja, ambas as atribuições na mesma declaração) funciona para mim:
typeset -r command_output=$(command) return_status=$?
Para manter o return_status
gravável (não somente leitura), você pode fazer:
typeset command_output=$(command) return_status=$?
typeset -r command_output
(isto é, declare a variável somente leitura como o comando subseqüente).