Para mostrar o status de retorno do comando anterior, você pode usar o prompt escape %? .
RPS1='%B%F{red}%?%f%b'
Você pode até mudar a cor dependendo do status de saída:
RPS1='%B%(?.%F{green}.%F{red})%?%f%b'
Ou só exibe qualquer coisa, se o comando retornou com um erro:
RPS1='%(?..%?)'
Isso irá colorir a saída verde se %? for avaliado como 0 e vermelho caso contrário.
Para substituir parâmetros arbitrários (como $? ), você precisa ativar a opção PROMPT_SUBST :
setopt promptsubst
Nesse caso, você precisa citar o parâmetro para evitar que seja substituído no momento da declaração. Por exemplo, usando aspas simples ou citando $ com um \ entre aspas duplas.
RPS1='$?'
RPS1="\$?'
BTW: Não é necessário exportar RPS1 (ou qualquer outro parâmetro de configuração do shell) para que ele tenha efeito.