Use printf
:
$ printf "%.4f\n" "$A"
1.2346
$ printf "%.4f\n" "$B"
0.0000
$ printf "%.4e\n" "$B"
1.2346e-05
$ printf "%.14f\n" "$B"
0.00001234567800
$ printf "%.4g\n" "$B"
1.235e-05
$ printf "%.4g\n" "$A"
1.235
Como %e
pode alterar o expoente, para manter o mesmo, você pode usar o manipulação de string apresenta para separar o número do expoente e imprimir cada um separadamente:
$ B=100.12345678E-05
$ printf '%.5fE%s\n' "${B%E*}" "${B##*E}"
100.12346E-05
O ${B%E*}
imprime tudo até o primeiro E
e ${B##*E}
é tudo após o primeiro E
.