局部函数变量的一个特性是自成体系。除了从脚本命令行处获得的变量,自成体系的函数不需要使用任何外部资源。
这个特性使得函数可以递归地调用,也就是说,函数可以调用自己来得到结果。通常递归函数都有一个最终可以迭代到的基准值。许多高级数学算法用递归对复杂的方程进行逐级规约,直到基准值定义的那级。
递归算法的经典例子是计算阶乘。一个数的阶乘是该数之前的所有数乘以该数的值。因此,要计算5的阶乘,可以执行如下方程:
5! = 1 * 2 * 3 * 4 * 5 = 120
使用递归,方程可以简化成以下形式:
x! = x * (x-1)!
也就是说,x的阶乘等于x乘以x-1的阶乘。这可以用简单的递归脚本表达为:
function factorial {
if [ $1 -eq 1 ]
then
echo 1
else