36.4 递归:调用自己的脚本

脚本可以递归的调用自己吗?答案是肯定的。

Example 36-10. 可以调用自己的脚本(但没什么实际用途)

#!/bin/bash
# recurse.sh

# 脚本可以调用自己吗?
# 其实是可以的。但这样有什么实际用途吗?
# (请往下看)

RANGE=10
MAXVAL=9

i=$RANDOM
let "i %= $RANGE"  # 在0到$RANGE - 1的范围内产生一个随机数

if [ "$i" -lt "$MAXVAL" ]
then
    echo "i = $i"
    ./$0           # 脚本进行递归调用(调用自己)
fi                 # 每次被调用的脚本做同样的事情,直到$i和$MAXVAL相等。 

# 如果使用“while”循环代替“if/then”语句会出问题。请试着解释为什么。

exit 0

# 笔记:
# ----
# 这个脚本文件必须有可执行权限。
# 即使使用“sh”命令调用,这脚本也可以执行。
# 请解释原因。

Example 36-11. 一个有点用的调用自己的脚本

Example 36-12. 另一个调用自己的脚本

过多层次的递归调用会导致脚本的栈空间溢出,引起段错误(segfault)。

最后更新于

这有帮助吗?