for loop range not working ksh

时间:2010-06-09 11:17:38

标签: linux unix shell ksh

我试过了,

#!/bin/ksh
for i in {1..10}
do
  echo "Welcome $i times"
done

在AIX框的Ksh中。 我得到输出,

  

欢迎{1..10}次

这里有什么问题? 是不是应该从1到10打印? 编辑: 根据perkolator的帖子,来自Iterating through a range of ints in ksh?

它仅适用于Linux。是否有任何其他解决方案/替换unix box ksh?

for i in 1 2 3 4 5 6 7 8 9 10

很难看。

感谢。

4 个答案:

答案 0 :(得分:4)

我认为从内存上看,AIX上的标准ksh是一个较旧的变体。它可能不支持ranged for循环。尝试使用ksh93代替ksh运行它。这应该与ksh位于同一位置,可能是/usr/bin

否则,只需使用旧式的东西:

i=1
while [[ $i -le 10 ]] ; do
    echo "Welcome $i times"
    i=$(expr $i + 1)
done

实际上,查看publib似乎证实了这一点(ksh93代码段)所以我会试着沿着这条路走下去。

答案 1 :(得分:0)

原因是93前ksh实际上并不支持范围。

当你在Linux上运行它时,你会发现ksh实际上是bash或ksh93的链接。

尝试循环: -

for ((i=0;i<10;i++))
do
 echo "Welcome $i time"
done

答案 2 :(得分:0)

似乎您拥有的ksh版本没有范围运算符。我在几个系统上看过这个。

你可以通过while循环解决这个问题:

while [[ $i -lt 10 ]] ; do
    echo "Welcome $i times"
   (( i += 1 ))
done

在我的系统上,我通常使用perl,因此脚本看起来像

#!/usr/bin/perl
for $i (1 .. 10) {
    echo "Welcome $i times"
}

答案 3 :(得分:0)

您可以查看jot是否有效see man page here,如果没有,请编写自己的小C程序来做同样的事情并调用它。

jot的语法类似于

for i in `jot 1 10`
do 
    //do stuff here
done