Você confundiu aqui.
Tanto [[ $(echo "$val < 0" | bc) -eq 1 ]] como (( $(bc <<<"$val < 0") == 1 )) usaram comparação inteira.
((..)) é equivalente a let incorporado em ksh , bash e zsh . Ele avaliou expressão aritmética . Dentro de ((..)) , todos os operadores e sua precedência, associatividade e valores são os mesmos que na linguagem C.
O que você confunde foi == dentro do novo operador de teste [[...]] . Quando == disponível, é equivalente a = e executa a correspondência de padrões. Você precisa de aspas duplas para fazer a comparação de string [[ "$a" == "$b" ]] .