Я должен добавить некоторые вещественные числа в сценарии. Я попробовал:
let var=2.5+2.5
который дает мне ошибку - недопустимый арифметический оператор, и затем я попробовал:
let var=2,5+2,5
который не дает мне ошибку, но она дает мне неправильный результат-2 в этом случае.
Почему? Как добавить, что использование вещественных чисел позволило или другая команда?
Первый вариант (let var=2.5+2.5
) не работает, потому что удар не поддерживает плавающую точку.
второй вариант (let var=2,5+2,5
) работы, но это не может быть тем, чего Вы желаете, потому что запятая имеет другое значение в этом случае: это - разделитель, разделитель команды. Так, Ваша команда эквивалентна в этом случае со следующими тремя командами:
let var=2
let 5+2
let 5
, которые все допустимы и из-за этого, Вы добираетесь var=2
.
, Но, хорошие новости - то, что можно использовать bc
для выполнения то, чего Вы желаете. Например:
var=$(bc <<< "2.5+2.5")
Или awk
:
var=$(awk "BEGIN {print 2.5+2.5; exit}")
Или perl
:
var=$(perl -e "print 2.5+2.5")
Или python
:
var=$(python -c "print 2.5+2.5")
Bash не обрабатывает арифметику с плавающей точкой.
при реальной необходимости в fp арифметике используйте bc
или dc
. Например,
var=$(bc <<< "2.5+2.5")
echo "$var"
произведет 5.0
, или с dc
(большая забава, это - обратная польская запись):
var=$(dc <<< "2.5 2.5 + p")
echo "$var"
также произведет 5.0
.
zsh является другой оболочкой, отличающейся для избиения, который позволяет плавающую точку в оболочке. Если Вы используете zsh вместо удара, которые действительно поддерживают let
плавающие точки использования, Вы не должны изменять сценарий. Просто установите его с помощью sudo apt-get install zsh
и затем с помощью него в сценарии с хижиной #!/usr/bin/zsh
или с помощью оболочки. Demostration:
➜ ~ let var=2.5+2.5
➜ ~ echo $var
5.0000000000
сценарий должен хорошо работать, так как zsh реализовал все функции, которые имеет удар и т.д. Ваш второй пример не будет работать, потому что запятая () интерпретируется оболочками как разделитель. Это говорит для выполнения команды let
с var=2
5+2
и 2
.