bash for-loop:仅在第一次迭代后执行某些操作

卡米尔·古德塞恩
for f in "$@"
do
  echo     # I'd like to skip this the first time
  echo $f
  print_info_about $f
done

bash 脚本的这个片段接受一些文件名并打印每个文件名和一些关于它的信息,它们之间有一个空行。
避免不必要的初始空白行的干净方法是什么?
等效地,echo除了最后一次之外,每次迭代之后的干净方法是什么?

比拆分第一个(或最后一个)项目$@并使用额外的print_info_about.
理想情况下,就像 Ruby 将所有内容累积到一个字符串数组中一样干净,然后.join("\n").

卡米尔·马乔罗夫斯基
separator=''
for f
do
  printf "$separator"
  separator='\n'
  echo "$f"
  print_info_about "$f"
done

这将separator='\n'在第 2 次迭代和以后的迭代中徒劳无功。但是赋值是在 shell 内部进行的,因此速度很快,所以性能应该不会受到影响。

这个问题被标记了,bash所以我修正了你的引用(未引用的变量在 中表现良好zsh)。鞋底for f相当于for f in "$@"


请注意,上述解决方案不是“仅在第一次迭代后才做某事”的通用方法。它是为您的特定“东西”量身定制的(打印一个空行作为分隔符)。

以下通用方法检查变量是否为空并do_something有条件地任意运行

marker=''
for f
do
  if [ "$marker" ]; then
    do_something
  fi
  marker=whatever
  print_info_about "$f"
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash循环仅适用于第一次迭代

来自分类Dev

第一次打开shell时执行bash脚本

来自分类Dev

for循环仅在第一次迭代时执行

来自分类Dev

具有`getopts`的Bash函数仅在第一次运行时有效

来自分类Dev

Bash-执行两个命令,如果第一次失败,则退出状态为1

来自分类Dev

如果bash中存在两个,则删除第一次出现

来自分类Dev

为什么getchar不能在第一次迭代后执行?

来自分类Dev

Cin在循环的第一次迭代后无法执行

来自分类Dev

LAPACK函数在第一次迭代后变慢

来自分类Dev

第一次迭代后中断循环

来自分类Dev

为什么在第一次迭代后就停止了?

来自分类Dev

While 循环在第一次迭代后中断

来自分类Dev

For 循环在第一次迭代后结束

来自分类Dev

Bash for循环在一次迭代后停止,没有错误

来自分类Dev

在 bash 脚本中第一次出现模式之前删除所有字符串

来自分类Dev

Bash脚本:在循环中执行一次操作,然后停止,但继续循环

来自分类Dev

广度第一次迭代?

来自分类Dev

广度第一次迭代?

来自分类Dev

MPI_Isend/Irecv 仅在 for 循环的第一次迭代中执行。是什么阻止它在循环的后续迭代中执行

来自分类Dev

为什么这个bash for循环只迭代一次?

来自分类Dev

查找下一个仅在第一次迭代中起作用

来自分类Dev

Async.foreach迭代强制停止直到执行第一次迭代

来自分类Dev

For循环正在更改迭代器,并在第一次迭代后停止

来自分类Dev

是什么导致我的循环仅在第一次迭代中忽略此“ \ t”?

来自分类Dev

仅在xsl:for-each循环的第一次迭代中添加xsl:param

来自分类Dev

whilef循环中的scanf仅在第一次迭代时读取

来自分类Dev

如何在循环中更改条件,但仅在第一次迭代之后?

来自分类Dev

嵌套 Do While 内循环仅在外循环的第一次迭代时运行

来自分类Dev

每三天执行一次bash脚本

Related 相关文章

  1. 1

    Bash循环仅适用于第一次迭代

  2. 2

    第一次打开shell时执行bash脚本

  3. 3

    for循环仅在第一次迭代时执行

  4. 4

    具有`getopts`的Bash函数仅在第一次运行时有效

  5. 5

    Bash-执行两个命令,如果第一次失败,则退出状态为1

  6. 6

    如果bash中存在两个,则删除第一次出现

  7. 7

    为什么getchar不能在第一次迭代后执行?

  8. 8

    Cin在循环的第一次迭代后无法执行

  9. 9

    LAPACK函数在第一次迭代后变慢

  10. 10

    第一次迭代后中断循环

  11. 11

    为什么在第一次迭代后就停止了?

  12. 12

    While 循环在第一次迭代后中断

  13. 13

    For 循环在第一次迭代后结束

  14. 14

    Bash for循环在一次迭代后停止,没有错误

  15. 15

    在 bash 脚本中第一次出现模式之前删除所有字符串

  16. 16

    Bash脚本:在循环中执行一次操作,然后停止,但继续循环

  17. 17

    广度第一次迭代?

  18. 18

    广度第一次迭代?

  19. 19

    MPI_Isend/Irecv 仅在 for 循环的第一次迭代中执行。是什么阻止它在循环的后续迭代中执行

  20. 20

    为什么这个bash for循环只迭代一次?

  21. 21

    查找下一个仅在第一次迭代中起作用

  22. 22

    Async.foreach迭代强制停止直到执行第一次迭代

  23. 23

    For循环正在更改迭代器,并在第一次迭代后停止

  24. 24

    是什么导致我的循环仅在第一次迭代中忽略此“ \ t”?

  25. 25

    仅在xsl:for-each循环的第一次迭代中添加xsl:param

  26. 26

    whilef循环中的scanf仅在第一次迭代时读取

  27. 27

    如何在循环中更改条件,但仅在第一次迭代之后?

  28. 28

    嵌套 Do While 内循环仅在外循环的第一次迭代时运行

  29. 29

    每三天执行一次bash脚本

热门标签

归档