KornShell (ksh) 是否有 Do...While 循环?

发布于 2025-01-03 06:47:01 字数 447 浏览 1 评论 0原文

我的 KornShell (ksh) 脚本中有一个循环,我想至少执行一次,并且我想要一种优雅的方式来执行它,但是,虽然我发现了很多关于如何编写 while 循环的内容,但似乎没有为 do...while 循环做任何事情。

我正在做的是从配置文件中读取以逗号分隔的文件列表并处理它们。如果文件列表为空,那么我想处理目录中的所有文件。

有什么好的方法可以做到这一点?

编辑:这是我目前所拥有的。我获取文件名,然后将其从字符串中删除以进行下一次传递。如果文件列表为空,我将退出循环。但是,如果列表一开始就是空的,我希望它仍然运行一次。

  while [[ -n "${FILES%%,*}" ]]; do
       FILE="${FILES%%,*}"                             
       FILES="${FILES#*,}"
  done

I have a loop in my KornShell (ksh) script that I want to execute at least once, and I want an elegant way of doing it, however while I have found plenty of stuff on how to write a while loop, there does not seem to be anything for a do...while loop out there.

What I am doing is reading in a comma-delimited list of files from a configuration file and processing them. If the list of files is empty, then I want to process all files in the directory.

What is a good way to do this?

EDIT: Here is what I have currently. I grab the filename, then remove it from the string for the next pass. If the list of Files is empty, I quit the loop. BUT, if the list is empty to begin with, I want it to still run once.

  while [[ -n "${FILES%%,*}" ]]; do
       FILE="${FILES%%,*}"                             
       FILES="${FILES#*,}"
  done

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

旧时光的容颜 2025-01-10 06:47:01

是的,ksh 中的标准 while 循环开箱即用地支持此功能:

while ...; do ...; done

标准 while 循环之前有代码块> 和之后执行

每个块可以包含多个命令。传统上我们只使用
第一个块的单个命令,其退出状态决定是否
循环终止或继续。

当我们使用多个命令时,只需
最后一个命令的状态很重要。

while
   echo do this always # replace with your code
   [[ -n "${FILES%%,*}" ]]
do
   FILE="${FILES%%,*}"                             
   FILES="${FILES#*,}"
done

Yes, the standard while loop in ksh supports this out of the box:

while ...; do ...; done

The standard while loop has code blocks before and after do.

Each block may contain multiple commands. Conventionally we use only
a single command for the first block, and its exit status determines whether
the loop terminates or is continued.

When we use multiple commands, only
the status of the last command matters.

while
   echo do this always # replace with your code
   [[ -n "${FILES%%,*}" ]]
do
   FILE="${FILES%%,*}"                             
   FILES="${FILES#*,}"
done
慕巷 2025-01-10 06:47:01

你可以伪造它:

do_once=true
while $do_once || [[ other condition ]]; do
  : your stuff here

  do_once=false
done

you could fake it:

do_once=true
while $do_once || [[ other condition ]]; do
  : your stuff here

  do_once=false
done
維他命╮ 2025-01-10 06:47:01

ksh 中没有这样的构造。您可以通过在 while true; 末尾处的 break(或 continue)来模拟这一点;做 ... ;完成循环。

There is no such construct in ksh. You can emulate this by break (or continue) at the end of a while true; do ... ; done loop.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文