以下两个示例都适用于现代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中是否有其他方法可以生成相同的序列?
答案 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)
使用seq
或jot
。您可能需要使用反引号而不是$()
。
for i in `seq 1 3`
如果您使用的QNX版本中的shell是ksh,那么您应该能够使用C风格的for
循环:
for ((i = 1; i <=3; i++ ))
修改强>
我现在猜测你有QNX 4,它有一个ksh86克隆作为它的shell。在我看来,在这种情况下,不包括seq
或jot
就已经死了。但是,除此之外,这里是应能够执行序列的黑客攻击:
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/