有没有办法在KornShell(ksh)中使用'for'来实现以下内容? 这是C等价物:
for(i=1;i<20;i++)
{
printf("%d",i);
}
我想知道这是否可以使用'for'而不是'while'来实现
我尝试了以下操作,似乎无法正常工作。
for i in [1-20]
do
print $i
done
请让我知道您的想法和解决方案。
答案 0 :(得分:6)
不是真正的答案,而是对休闲ksh用户的一个FYI。
编辑2019-05-12 (粗体中的小编辑,其他信息现在 stricken )。
为了澄清这里的几条评论,在典型的供应商安装中有2个ksh可用(非Linux(也许它们也是?))。
Solaris和AIX有一个ksh和ksh93(对其他供应商来说也是如此)。基础ksh也称为ksh88。 Ksh93在The New Kornshell Command and Programming Language, 1995
中有描述具有真正ksh(不是pdksh)的Linux系统,大多使用名为ksh的ksh93。
最后,为了进一步混淆事情,不要让1995年的发布日期欺骗你,ksh 继续 正在积极开发中由David Korn和Glen Fowler在AT&amp;直到2012年? 版本每年发布2-3次。一些Linux版本会选择较新的版本。
这些较新版本具有非常高级的功能
(大部分取自 AT&T research UWIN page. search for the link 'notes and changes' (死链接))
(注意上面的...... s,通常表示删除了一些符合条件的信息)
Korn和Fowler 还为使用Mingw或Cygwin等系统的人们制作了一个高级环境UWIN(Unix for Windows),这个系统值得单独发布。 UWIN的缺点是,
参见 UWin main page (死链接):不幸的是,过时了,最好在上面的dnld链接中找到它。嗯,这更好 Glenn Fowler's FAQ for UWin (也死了,Time Machine有人吗?)。
我希望这有帮助!
修改2019-05-12 。死链接的原因是什么? David Korn and Glen Fowler Laid Off (at AT&T, 2012?
后来有消息称他们正在Google工作。我无法证实这一点,所以认为这是一个古老的谣言。
ast git-hub site似乎还有一些活动。 ast
是包含ksh93
的重叠包。您可以在那里获得新的源代码并进行编译。
以下是项目说明的文字。 (README.md
)中有相当多的信息。
ksh93的
此存储库包含AT&amp; T软件技术(AST)工具包 来自AT&amp; T Research。截至2017年11月,发展重点一直是 转移到ksh(或ksh93)命令和支持所需的代码 建立它。
AST项目的非ksh代码不再是主动的 保持。如果您对非ksh代码感兴趣,请参阅下面的内容 有关哪些分支包含完整AST代码库的详细信息。
该项目仅支持编译器和底层系统 硬件与ASCII兼容。这包括Linux on IBM zSeries但是 不是z / OS。对EBCDIC的新生,不完整的支持一直是 除去。见问题#742。
* EPL取代了AT&amp; T的原始CPL。
答案 1 :(得分:5)
不幸的是,看起来好像ksh
不支持基于范围的大括号扩展或支持(( ))
构造,所以要紧凑地执行此操作,您需要调用外部二进制文件{{ 1}}像这样:
seq
答案 2 :(得分:5)
ksh93支持类似C的(( ...;...; ...))
:
for ((i=1;i<20;i+=1)); do
printf "%d " $i
done && print
这将产生:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
哎呀,即使是旧语法(使用'{'...'}'而不是'do ... done'也会有效):
for((i=1;i<20;i+=1))
{
printf "%d " $i
} && print
在较旧的shell中,您仍可以使用
获得相同的效果i=1 && while ((i<20)); do
printf "%d " $i
((i+=1))
done && print
答案 3 :(得分:1)
ksh93也会提供大括号扩展。选中“set -o”,然后使用花括号{}
for i in {1..20}
do
print $i
done