【问题标题】:Doing a loop only 5 times只循环 5 次
【发布时间】:2011-12-31 22:40:09
【问题描述】:

我只想循环(for file in *) 5 次(所以它不再是一个真正的循环,但是)有没有办法做到这一点?

【问题讨论】:

  • 如何将循环限制为 5 次迭代使其“不是真正的循环”?
  • 还有seq 命令。

标签: bash shell unix loops


【解决方案1】:

将文件放入数组中,然后对数组进行切片。

$ files=(*)
$ for file in "${files[@]::5}" ; do echo "$file" ; done
あいうえお
0000000000-11-005978.txt
0000000000-11-020832.txt
1
,123

【讨论】:

    【解决方案2】:

    这只会查看目录中的前五个项目:

    for file in $(ls | head -5)
    

    正如 Ignacio Vazquez-Abrams 指出的那样,这仅适用于您的文件名不包含任何空格的情况。 (他们可能不会,但要记住一些事情。)

    【讨论】:

    • 除非其中一个文件名中有空格。
    • @IgnacioVazquez-Abrams 嗯,虽然你是对的,但这很少见。
    • @chrisaycock:文件名中的空格并不罕见。 for file in "$(ls -1 | head -5)"; do echo "$file"; done 做了它应该做的事情。
    • @Dennis:这不起作用,因为双引号使它将所有 5 个文件名(以及它们之间的换行符)视为 $file 的单个值。用echo "file='$file'" 替换echo 命令,你就会明白我的意思了。
    【解决方案3】:

    假设进入循环时变量 i 为 undefined 或 0 且未在循环中使用,则添加以下行:

    测试 $((++i)) -ge 5 && break

    在循环体中。循环将在第 5 次迭代期间中断,因此如果将行放在循环体的末尾,您的命令将执行 5 次。如果你的 shell 支持它,你也可以使用不太便携的

    ((++i >= 5)) && 中断

    【讨论】:

      【解决方案4】:

      这是另一种解决方案,它只使用 bash 而没有外部工具:

      let COUNT=0
      for FILENAME in *
      do
          echo do something to $FILENAME
          let COUNT=COUNT+1
          if (( $COUNT == "5" )); then
              break
          fi
      done
      

      【讨论】:

        猜你喜欢
        • 2021-12-30
        • 2015-09-28
        • 2016-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-27
        相关资源
        最近更新 更多