我正在编写一个脚本,该脚本接受2个数字作为输入,并使用递归将数字加到另一个简单的幂运算的幂上。但是,我是脚本新手,无法弄清楚这里语法错误的地方。
这是脚本
#!/bin/bash
echo "Enter number: "
read number
echo "Enter power: "
read power
echo "Powering $number to power of $power!"
exp () {
if [ $2 = 1 ]
then
return $1
fi
return $1 * $(exp $1 $2-1 )
}
result=$(exp $number, $power)
echo "Result: $result"
当前,它会冻结,我不确定我是否正确使用了参数(就语法而言)。
答案 0 :(得分:1)
您需要$(( ))
来强制进行算术评估。然后,您可以使用返回值:
number=2 power=7
exp () {
if [ $2 -eq 1 ]; then return $1; fi
exp $1 $(($2-1))
return $(($1 * $?))
}
exp $number $power; result=$?
echo "Result: $result"
但这是一个坏主意,因为shell会保留非零的返回值以进行通信失败(例如,上述解决方案
将“破坏” set -e
)。
更多地,您可以使用stdout:
set -e
number=2 power=7
exp () {
if [ $2 -eq 1 ]; then echo $1; return; fi
echo $(($1 * $(exp $1 $(($2-1)) ) ))
}
result=$(exp $number $power)
echo "Result: $result"
但是对于所有子shell来说效率低下。 最好避免递归并简单地循环:
number=2 power=7
exp () {
local res=1 i=0;
while [ $i -lt $2 ]; do res=$((res*$1)); i=$((i+1)); done
echo $res
}
exp $number $power