QNX shell循环序列

时间:2012-06-25 11:19:04

标签: bash shell unix sh qnx

以下两个示例都适用于现代Bash,但不适用于不同的sh shell(如QNX shell)。

$ for i in {1..3}; do echo $i; done
1
2
3

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

在QNX shell中是否有其他方法可以生成相同的序列?

5 个答案:

答案 0 :(得分:1)

我找到了一个适用于QNX shell的方法:

integer i=0
while ((i<4)); do i=i+1; echo $i; done

答案 1 :(得分:1)

以下是模拟expr黑客的简单解决方法。

yes |
head -n 3 |
nl |
while read i yes; do
  ....
done

如果您不关心i的价值,可以取出nl行号。

答案 2 :(得分:0)

使用seqjot。您可能需要使用反引号而不是$()

for i in `seq 1 3`

如果您使用的QNX版本中的shell是ksh,那么您应该能够使用C风格的for循环:

for ((i = 1; i <=3; i++ ))

修改

我现在猜测你有QNX 4,它有一个ksh86克隆作为它的shell。在我看来,在这种情况下,不包括seqjot就已经死了。但是,除此之外,这里是能够执行序列的黑客攻击:

end=3
for n in $(echo "for (i = 1; i <= $end; i++) i" | bc)
do
    echo "$n"
done

答案 3 :(得分:0)

任何符合posix标准的shell都允许你迭代:

i=1
while expr $i \< 4 > /dev/null; do
  echo $i
  : $(( i + 1 ))
done

如果你有一个旧shell,你可能需要用循环替换循环内的最后一行 i=$( expr $i + 1 ),在极少数情况下,您可能需要使用后退。

答案 4 :(得分:0)

您可以从NetBSD pkgsrc存储库获取QNX的bash: ftp://ftp.netbsd.org/pub/pkgsrc/packages/QNX/i386/6.5.0_head_20110826/shells/