bc diferem um pouco no status de retorno, mas a ideia geral é que, se você fornecer uma entrada válida, bc sai com o status 0. 42/0 é uma entrada válida: não há erro de leitura e é até mesmo uma expressão sintaticamente válida, portanto bc retorna 0. Se você passou uma segunda linha com outra operação, bc a executaria. Isso é diferente de expr cuja finalidade é avaliar uma única expressão aritmética; aqui o resultado dessa única expressão determina o status de retorno.
A maneira mais direta de gerar um status de saída que indica falha é chamar false . Coisas como expr 1 / 0 só têm o seu lugar em concursos de programação ofuscados.