1

我正在编写一个 bash 脚本,以使 cd'ing 到 Dropbox 文件夹(我为 uni 存储课程作业的地方)更容易。我决定使用参数将我直接放入文件夹中某些周,或父目录或包含我所有参考资料的目录。我还决定使用递归来验证输入(最初我通过将递归语句放在 do while 循环中创建了一个无限循环)。代码如下:

#!/bin.bash
#changes to ~/Dropbox/UCP120/

function recurCall () {
   echo "Invalid input: $arg1 does not exist."
   echo "Enter a valid input"
   read inputLoop 
   validateInput $inputLoop
}

function validateInput() {
   arg1="$1"
   reference="r"

##snip##

   ##if DIR is !null but non-existent loop and ask for input   
   elif [[ ! -d .../UCP120/"$arg1"/ || ! -d .../UCP120/Week\"$arg1"/ ]]; then     
      recurCall $arg1
      ##Recursive solutions don't require iterative control structures.
      #while [[ snip (see if above) ]]; do
        #   recurCall $arg1
        #done
   fi
}

##Call the function. Get this ball rolling
validateInput $1

我的问题是:

  1. 我只是幸运这有效吗?还是我设法设计得相当好?
  2. 递归是一个现实世界可行的解决方案吗?还是在学习练习之外毫无用处?
  3. 有没有像我考虑不周的原始尝试那样在迭代内部进行递归的真实世界应用程序?
  4. 我该如何改进呢?

谢谢,如果我问了不恰当的问题,我深表歉意。但是,我希望拥有丰富经验的互联网可以帮助我和我对这些概念的理解。

编辑:删除了 validateInput 中的 if then 语句。交换函数名称,因为这样更有意义。删除了 while 条件以希望减轻屏幕宽度。

编辑:缩短目录路径以进一步减轻屏幕宽度。

4

1 回答 1

0
  1. 只要您不通过输入成千上万的无效输入来耗尽外壳的堆栈空间,这就会起作用。
  2. 既然有效,那就是可行的。但是,我发现它比 while 循环更难掌握,我更喜欢后者;但这可能是一个品味问题。
  3. 当然,在迭代中存在递归应用程序,但不像这里,迭代从递归返回后永远不会继续。
  4. 避免递归。;-)
于 2013-08-12T13:31:03.303 回答