Как @Theophrastus отметил выше, ни bash
, ни bc
не поддерживают научную обозначение.
Для простых сравнений и вычислений я предлагаю использовать awk
(который обрабатывает числа xEy):
a=10e-12
b=12e-12
r=$(awk 'BEGIN{print ('$a'>'$b')?1:0}')
echo $r
Для более сложных выражений вы можете избежать громоздкой обработки кавычек и экранирования, передав переменные в awk
с -v
, что на самом деле было бы предпочтительным способом сделать это:
r=$(awk -v a="$a" -v b="$b" 'BEGIN{print (a<b)?1:0}')
Есть способы переформатировать вашу нотацию в альтернативную форму x * 10 ^ y , что понимается как bc
(или вы можете просто сделать это самостоятельно), однако bc
имеет некоторые особенности, когда дело доходит до отрицательных показателей степени (например, ваш пример):
$ bc
10^12
1000000000000
10^-12
0