Sua função tem um status de saída, mas nenhuma saída. Sua variável $a
estará sempre vazia, então o teste [[ $a ]]
será sempre "falso"
Você realmente quer isso:
if is_equal 42; then ...
Mas o que você acha que quer é isso
is_equal 42 # don't capture the output
a=$? # but do grab the exit status
if [[ $a -eq 0 ]]; then ...