Почему команда, которой позволяют, не работает для добавления вещественных чисел?

Я должен добавить некоторые вещественные числа в сценарии. Я попробовал:

let var=2.5+2.5 

который дает мне ошибку - недопустимый арифметический оператор, и затем я попробовал:

let var=2,5+2,5 

который не дает мне ошибку, но она дает мне неправильный результат-2 в этом случае.

Почему? Как добавить, что использование вещественных чисел позволило или другая команда?

3
задан 12 September 2018 в 17:48

3 ответа

Первый вариант (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")
6
ответ дан 1 December 2019 в 13:04

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.

4
ответ дан 1 December 2019 в 13:04

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.

2
ответ дан 1 December 2019 в 13:04

Другие вопросы по тегам:

Похожие вопросы: