Добавление двух чисел с помощью expr

Судя по исходному коду, числа в квадратных скобках являются априорным предполагаемым показателем успешности для данного предиката. Таким образом, первое [0.4] оценка вероятности что -type d оценит к истинному. Это может использоваться для определения порядка, в котором оценены условия предиката. Можно найти больше в findutils-4.4.2/find/parser.c, findutils-4.4.2/find/tree.c и findutils-4.4.2/find/pred.c.

13
08.08.2012, 07:20
9 ответов

Сначала необходимо избавиться от пробелов для присвоения, например,

sum='expr $num1 + $num2'

затем необходимо измениться ' к a ` или еще лучше к $():

sum=$(expr "$num1" + "$num2")

вместо использования expr можно также сделать вычисление непосредственно в оболочке:

sum=$((num1 + num2))
39
27.01.2020, 19:52
  • 1
    Если мотивация для использования expr вместо $((...)) требование состоит в том, чтобы быть портативным к классической Оболочке Bourne, затем это - хорошая идея избежать $(...) также. –  Alan Curry 08.08.2012, 07:55
  • 2
    @AlanCurry является там любыми оболочками, не поддерживающими $()? Насколько я знаю, что это требуется posix, например, все posix совместимые оболочки должны поддерживать $() –  Ulrich Dangel 08.08.2012, 08:27
  • 3
    @UlrichDangel исходная Оболочка Bourne не имел $(…), но это имеет о вымершем (возможно, кто-то где-нибудь все еще работает /bin/sh на Солярисе). –  Gilles 'SO- stop being evil' 09.08.2012, 01:33
  • 4
    , который не поддерживает Оболочка C $(…) – или по крайней мере, не все версии. –  Scott 12.01.2013, 00:32
  • 5
    Какова цель наличия двойных кавычек вокруг переменных? –  kojow7 04.04.2018, 02:06

Вы, вероятно, неправильно читали обратные галочки как одинарные кавычки в строке:

sum = 'expr $num1 + $num2'

Посмотрите Wiki Greg на использовании $(...) вместо этого.

Это работает как ожидалось:

sum=$(expr "$num1" + "$num2")

Также примечание там не является никакими разрывами вокруг, равняется знаку (переменное присвоение).

9
27.01.2020, 19:52
echo "addition of two number"

echo "enter a number"
read a
echo "enter a number"
read b

c=`expr $a + $b`

echo $c
-3
27.01.2020, 19:52
  • 1
    Это не отвечает на вопрос. Некоторое объяснение помогло бы. –  Bernhard 27.08.2012, 08:58

Можно использовать единственную обратную галочку ('ключ)

-2
27.01.2020, 19:52
  • 1
    Это - обратная галочка, и рекомендуется использовать $( ... ) вместо этого в оболочках. Кроме того, проблема состоит в том, что OP использует пробелы, где они не были должны. –  vonbrand 09.03.2013, 15:00
#!/bin/bash
function add()
{
sum=`expr $a + $b`
echo "Sum is :$sum";
}

echo "Enter the value of a";
read a
echo "Enter the valure of b";
read b
add
-1
27.01.2020, 19:52

echo "enter first no :"; read a
echo "enter second no :"; read b
echo "sum = `expr $a + $b`"
-1
27.01.2020, 19:52
echo a 
read a
echo b
read b
c=`expr $a + $b`
echo $c
-2
27.01.2020, 19:52

expr - внешняя программа, используемая Оболочка Борна (т.е. sh). В оболочке Bourne изначально не было механизма для выполнения простых арифметических операций.Он использует внешнюю программу expr с помощью обратной кавычки.

Обратный апостроф ( `) на самом деле называется подстановкой команд. Подстановка команд - это механизм, с помощью которого оболочка выполняет заданный набор команд, а затем заменяет их вывод на место команд.

sum=`expr $num1 + $num2`

В bash (bourne again shell) он имеет следующий синтаксис, он не будет использовать внешнюю программу expr .

sum=$((num1+num2))

, если мы хотим использовать внешнюю программу expr . у нас есть следующий синтаксис:

sum=$(expr $num1 + $num2)
1
27.01.2020, 19:52

Если вы используете bash, вы можете просто сделать что-то вроде этого:

sum=$((num1+num2))
0
27.01.2020, 19:52

Теги

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