【问题标题】:Rewrite a bash for loop as a while loop将 bash for 循环重写为 while 循环
【发布时间】:2015-06-17 15:21:53
【问题描述】:

作为课堂练习,我的教授要求全班将这个for 循环(有效)重写为while 循环或until 循环。任何帮助将不胜感激。

#!/bin/bash

set -x

#go to home directory
cd ~

for entry in `ls`
do  
    if [ -d "$entry"] ; then
        echo "Dir: $entry"
    else
        echo "File: $entry"
    fi  
done

【问题讨论】:

  • ls 的这种使用是一种反模式。请参阅 mywiki.wooledge.org/ParsingLsmywiki.wooledge.org/DontReadLinesWithFor 了解原因。
  • 既然您的教授希望您学习:研究 while 循环的工作原理:与 for 循环相比,while 循环的主要特征是什么。列出它们的行为有何不同,然后你就可以写出来了。
  • 对于目录内容的操作,for 循环是自然(且正确)的模型。你有更多关于while/until 逻辑应该如何在这里工作的说明吗?它只是“遍历所有文件”吗?
  • 假设ls 的使用只是一个示例程序(应该使用通配符,并且无论如何不推荐使用反引号)研究进程替换
  • 我们应该做的是让脚本执行与现在相同的功能,只是使用 while 或 until 循环代替

标签: bash for-loop while-loop


【解决方案1】:

这是与您的示例的 1:1 映射(相同的限制:例如,文件名中没有 \n 字符):

#!/bin/bash

while read -r entry
do
    if [ -d "$entry" ]; then
        echo "Dir : $entry"
    else
        echo "File: $entry"
    fi
done < <(ls)

【讨论】:

  • 您的代码有效,感谢您的帮助,但我需要编辑上面的代码才能完成您的工作。我不能只上交所有新代码。
猜你喜欢
  • 2014-09-03
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 2014-03-15
  • 2014-08-06
  • 2018-08-13
相关资源
最近更新 更多