#!/bin/bash
thing() {
local foo=$(asjkdh) ret="$?"
echo "$ret"
}
Isto irá ecoar 127 , o código de erro correto para "comando não encontrado".
Você pode usar local para definir mais de uma variável. Então, eu também apenas criei a variável local RET para capturar o código de saída da subshell antes de local suceder e definir $? para zero.