tom*_*h13 2 shell scripting ksh for-loop
有没有办法在KornShell(ksh)中使用'for'来实现以下内容?这是C等价物:
for(i=1;i<20;i++)
{
printf("%d",i);
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是否可以使用'for'而不是'while'来实现
我试过以下,似乎没有用.
for i in [1-20]
do
print $i
done
Run Code Online (Sandbox Code Playgroud)
请让我知道您的想法和解决方案.
不是一个真正的答案,而是对于休闲ksh用户的一个FYI.
为了澄清这里的几条评论,在典型的供应商安装中有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继续由AT&T的David Korn和Glen Fowler积极开发.新版本每年发布2-3X.一些Linux版本会选择较新的版本.
这些较新的版本具有非常先进的功能(大部分功能来自AT&T研究UWIN页面.搜索链接'注释和更改')
(注意......上面的...... s,通常表示删除了一些符合条件的信息)
Korn和Fowler还为使用Mingw或Cygwin等系统的人们制作了一个先进的环境UWIN(Unix for Windows),这个系统值得单独发布.UWIN的缺点是,
查看UWin主页:不幸的是过时了,最好在上面的dnld链接中查看.嗯,这对于Glenn Fowler的UWin常见问题解答要好得多.我希望这有帮助!
*EPL取代了AT&T的原始CPL.
不幸的是,它看起来ksh似乎不支持基于范围的大括号扩展或支持(( ))构造,所以要紧凑地执行此操作,您需要seq像这样调用外部二进制文件:
for i in $(seq 1 20); do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
ksh93支持类似C的代码(( ...;...; ...)):
for ((i=1;i<20;i+=1)); do
printf "%d " $i
done && print
Run Code Online (Sandbox Code Playgroud)
这将产生:
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
Run Code Online (Sandbox Code Playgroud)
在较旧的Shell中,您仍然可以通过
i=1 && while ((i<20)); do
printf "%d " $i
((i+=1))
done && print
Run Code Online (Sandbox Code Playgroud)