У меня есть сценарий, который использует значения плавающие, но некоторые, как я не могу вычесть два плавания.
Это - пример кода
#!/bin/bash
p="1"
h="10"
m=$(echo "3.5"| bc -l)
for (( c=$p; c<=$h; c++ ))
do
r=$(echo "($p-$m)"| bc -l)
echo "Z $c $m $r"
done
и это - результат
Z 1 3.5 -2.5
Z 2 3.5 -2.5
Z 3 3.5 -2.5
Z 4 3.5 -2.5
Z 5 3.5 -2.5
Z 6 3.5 -2.5
Z 7 3.5 -2.5
Z 8 3.5 -2.5
Z 9 3.5 -2.5
Z 10 3.5 -2.5
Измените строку
r=$(echo "($p-$m)"| bc -l)
к
r=$(echo "($c-$m)"| bc -l)
, поскольку это не $p
, но $c
, который изменяется циклом.
bash
не поддерживает арифметику с плавающей точкой. ksh
и zsh
сделать. POSIXLy, Вы могли использовать также bc
поскольку ответ Florian предлагает, или awk
. Например,
$ awk 'BEGIN{print 2.5+3.7}'
6.2
Ubuntu также идет Python
и Perl
которые более, чем способны к выполнению вычислений с плавающей точкой.
$ perl -le 'print(2.5+3.7)'
6.2
$ python3 -c 'print(2.5+3.7)'
6.2
См. также очень обширный список других опций: Как сделать целочисленные и вычисления плавающие в ударе или других языках/платформах?
Обратите внимание также на это согласно POSIX стандарт Языка Shell в арифметическом расширении $((...))
:
Только арифметика длинного целого со знаком требуется... Как расширение, оболочка может распознать арифметические выражения вне перечисленных.
Так пропуск арифметики с плавающей точкой от bash
и /bin/dash
соответствует спецификациям POSIX.