Shell 关于';对于';科恩希尔环路

Shell 关于';对于';科恩希尔环路,shell,scripting,for-loop,ksh,Shell,Scripting,For Loop,Ksh,有没有办法在KornShell(ksh)中使用“for”实现以下功能? 以下是C等价物: for(i=1;i<20;i++) { printf("%d",i); } 请让我知道您的想法和解决方案。不幸的是,ksh似乎不支持基于范围的大括号扩展,或者不支持(())构造,因此要简洁地实现这一点,您需要调用外部二进制文件seq,如下所示: for i in $(seq 1 20); do echo $i done ksh93支持类C的((…;…;…): for((i=1;i不是一

有没有办法在KornShell(ksh)中使用“for”实现以下功能? 以下是C等价物:

for(i=1;i<20;i++)
{
    printf("%d",i);
}

请让我知道您的想法和解决方案。

不幸的是,
ksh
似乎不支持基于范围的大括号扩展,或者不支持
(())
构造,因此要简洁地实现这一点,您需要调用外部二进制文件
seq
,如下所示:

for i in $(seq 1 20); do
  echo $i
done

ksh93支持类C的
((…;…;…)


for((i=1;i不是一个真正的答案,而是给ksh临时用户的参考

编辑2019-05-12(下面以粗体进行小编辑,其他信息现在被删除)

为了澄清这里的一些评论,在典型的供应商安装中有2个ksh可用(非Linux(可能也是?)

Solaris和AIX有ksh和ksh93(对于其他供应商可能也是如此)

具有真正ksh(不是pdksh)的Linux系统大多使用名为ksh的ksh93

最后,为了进一步混淆事情,不要让1995年的发布日期欺骗你,ksh继续在at&t的David Korn和Glen Fowler的积极开发下运行,直到2012年?版本每年发布2-3次。一些Linux版本采用较新版本

这些较新版本具有非常高级的功能 (大部分来自(死链接))

  • 由c结构组成的复合变量(没有c数据类型,只有类型decls)(一个用户声称内存中有一个500兆的结构)
  • 双精度浮点算法和完整的C99算法。数字Inf和NaN可用于算术表达式
  • 制表符-制表符完成生成编号的完成列表
  • 支持处理/处理多字节区域设置(例如,en_US.UTF-8、hi_IN.UTF-8、ja_JP.eucJP、zh_CN.GB18030、zh_TW.BIG5等)
  • /dev/(tcp | udp | sctp)/host/sevrice现在处理IPv6地址
  • …使用新的重定向运算符按偏移量或内容在文件上搜索
  • 一个新的--showme选项,允许脚本的某些部分像指定了-x一样运行,而其他部分则像往常一样执行
  • 已添加[…]]运算符=~以将字符串与扩展正则表达式进行比较
  • printf(1)内置已扩展,以支持将字段(和其他)居中的=标志
  • 视图路径
  • “大多数实用程序由AT&T开发,并符合POSIX.2和X/Open。”
(请注意,上面的…s通常表示删除了某些限定信息)

Korn和Fowler还为使用Mingw或Cygwin等系统的用户开发了一个高级环境UWIN(Unix for Windows),该环境值得单独发布。UWIN的缺点是

  • 与您在最喜爱的Linux中找到的工具集不同
  • 另一个几乎必须使用MS Visual C的文件编译环境(据说通过Mingw提供的gcc支持即将推出)
  • 一个非常小的支持社区
  • AT&T通用公共许可证V1.0*不是GNU
请看(死链接):不幸的是,过时了,最好在上面的dnld链接中四处寻找。嗯,这要好得多(也死了,时间机器有人吗?)

我希望这有帮助

编辑2019-05-12。死链接的原因是什么?

信息后来浮出水面,他们在谷歌工作。我不能证实这一点,所以把它当作一个古老的谣言。< /P> 看看

现在似乎仍有一些活动。
ast
是一个包含
ksh93
的总体包。您可以在那里获得新的源代码并编译它


以下是项目说明的文本。(在
README.md
中有更多信息)

KSH93 此存储库包含AT&T软件技术(AST)工具包 来自AT&T Research。截至2017年11月,发展重点为 转换为ksh(或ksh93)命令和所需的支持代码 建造它

AST项目的非ksh代码不再有效 维护。如果您对非ksh代码感兴趣,请参阅下面的了解 有关哪些分支包含完整AST代码库的详细信息

该项目仅支持编译器和底层 硬件是ASCII兼容的。这包括IBM zSeries上的Linux,但 不是z/OS。对EBCDIC的新的、不完整的支持 已删除。请参阅第742期

*
EPL取代了AT&T原来的CPL。

ksh93在“braceexpand”为“on”时也提供了braceexpansion。请使用“set-o”进行检查,然后使用大括号{}

for i in {1..20}
do
  print $i
done

请在网上搜索。“ksh for”将在一瞬间弹出答案。这取决于您的互联网连接速度course@mat:抱歉,朋友,我一直在搜索标签错误的东西…我的错!!Solaris中的ksh同时支持(())和{1..20}太多了…刚刚测试了它们两个…谢谢你的备选答案使用“seq”这里看起来有点奇怪。这个问题要求使用“seq”的shell实现。“seq 1 19”然后成为这个答案的缩写;-)
for ((i=1;i<20;i+=1)); do
    printf "%d " $i
done && print
for((i=1;i<20;i+=1))
{
   printf "%d " $i
} && print
i=1 && while ((i<20)); do
    printf "%d " $i
    ((i+=1))
done && print
for i in {1..20}
do
  print $i
done