a=10.5
b=11.8
c=`expr $a + $b | bc`
echo $c
После выполнения отображается сообщение об ошибке, подобное non-integer argument
. Почему это не выполняет арифметику с использованием expr
?
Ошибка совпадает с, если Вы вводите:
$ expr 10.5 + 11.8
expr: non-integer argument
Expr жалуется, что Вы дали ему нецелые числа. Это вызвано тем, что expr
программа не была разработана для вычислений нецелого числа:
Операнды являются или целыми числами или строками.
expr
был сгенерирован как стандартная погрешность, Ваш терминал просто отображает ее|
, передайте по каналу только стандарт передач, не стандартную погрешностьПоскольку bc
не получил ничего для работы с, это не дало Вам вывода вообще, поскольку Вы видите, когда Вы пытаетесь ничего не отправить (кроме новой строки) к bc
:
$ echo | bc
Результат bc
не говорит ничто. Таким образом, то, что Вы видите на своем экране с Вашей исходной командой, было все еще справедливо expr
жалоба через стандартную погрешность.
Для десятичных вычислений можно использовать просто bc
и некоторые средства, которые будут введены к bc
, такой как со здесь-строками:
$ bc <<< '10.5 + 11.8'
22.3
Или, для использования переменных:
$ a=10.5
$ b=11.8
$ c=$(bc <<< "$a + $b")
$ echo $c
22.3
$(
и )
замена команды<<< string
здесь-строковый синтаксис, отправляет строковое содержание в stdin, который до н.э получает info coreutils 'expr invocation'
говорит:
16.4 `expr': Evaluate expressions
=================================
`expr' evaluates an expression and writes the result on standard
output. Each token of the expression must be a separate argument.
Operands are either integers or strings. Integers consist of one or
more decimal digits, with an optional leading `-'. `expr' converts
anything appearing in an operand position to an integer or a string
depending on the operation being applied to it.
Однако можно использовать bc
:
$ a=10.5 b=11.8 c=$(echo "scale=1;$a + $b" | bc -q );echo $c
22.3