Tente isto:
variable="3 things"
if echo "$variable" | grep "^[0-9]\{1,\}" >/dev/null 2>&1 #if $variable begins with [0-9]
then
echo "$variable" | sed 's/ .*$//'
else
echo "0"
fi
Ao usar a notação $(...) , você está executando o comando interno e colocando sua saída em seu lugar. A diretiva if executa a saída disso e vê se ela é bem-sucedida. Nesse caso, você realmente quer testar o sucesso do comando colocado dentro do $(...) . Também é bom citar variáveis quando usado.