c=$( printf '%s - %s\n' "$a" "$b" | bc )
o, para los perezosos,
c=$( echo "$a - $b" | bc )
o, para el usuario perezoso bash
,
c=$( bc <<<"$a - $b" )
El problema con tu código es que
c=$((a-b)) | bc
no funcionará. Solo puede (útilmente )canalizar cosas que producen salida, y c=$((a-b))
es una asignación que 1 )fallará si $a
o $b
son números de punto flotante (con un error de sintaxis )y 2 )no produce salida. Además, la salida debc
(nada )no se asignará a c
ya que no forma parte de la asignación en absoluto.