说我有以下内容:
n=10
function decrement {
if [ $n -eq 0 ]; then
echo recurse_done
else
echo $n
decrement $(( $n-1 ))
fi
}
decrement n
上面将创建一个无限调用递减功能并且n
不会减少。我四处搜寻发现function $(( some_arithemtic_operation ))
,显然它不起作用..
答案1
您必须决定要传递给函数的参数:它是变量吗姓名或一个价值?
如果它是一个名称,则需要间接变量扩展:
function decrement {
local var=$1
if [[ ${!var} -eq 0 ]]; then
echo recurse_done
else
echo ${!var}
declare "$var=$(( ${!var} - 1))"
decrement $var
fi
}
decrement n
如果它是一种价值,你的生活会更简单
function decrement {
local value=$1
if [[ $value -eq 0 ]]; then
echo recurse done
else
echo $value
decrement $((value-1))
fi
}
decrement $n
但为什么这是递归的呢?seq $n -1 1
将从 $n 倒数到 1