Вы должны поместить $
перед переменными:
sum=$(Expression $num1 $num2 $num3)
Здесь происходит то, что вы передаете имена переменных, а не значения.Давайте посмотрим на упрощенную версию вашей программы
#!/bin/bash
Expression()
{
local num5=$1
echo $((num5))
}
num3=7
echo "The result is $(Expression num3)"
Вы передаете текст num3
, а не значение 7
.Оператор $(())
пытается оценить числа.num5
не число, а переменная.Таким образом, оно заменяется значением num3
.num3
не является числом, поэтому оно заменяется значением 7
.
Вы можете вложить это, вывод будет 5
.
#!/bin/bash
num1=num2
num2=num3
num3=num4
num4=5
echo $((num1))
Вы также можете попробоватьэто:
#!/bin/bash
num1=num2
num2=num3
num3=num4
num4=num1
echo $((num1))
Результат равен
line 6: num4: expression recursion level exceeded (error token is "num4")
Таким образом, оценка действительно рекурсивная, пока не будет достигнуто число или предел.