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" ]]
.