以下两个示例都适用于现代 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 中产生相同的序列?
我找到了一个在 QNX shell 中工作的方法:
integer i=0
while ((i<4)); do i=i+1; echo $i; done
expr
这是一个模拟黑客攻击的简单解决方法。
yes |
head -n 3 |
nl |
while read i yes; do
....
done
如果你不关心你的价值,i
你可以取出nl
行号。
使用seq
或jot
。您可能需要使用反引号而不是$()
.
for i in `seq 1 3`
如果您使用的 QNX 版本中的 shell 是 ksh,那么您应该能够使用 C 风格的for
循环:
for ((i = 1; i <=3; i++ ))
编辑:
我现在猜你有 QNX 4,它有一个 ksh86 克隆作为它的外壳。在我看来,在这种情况下,不包括seq
or是脑死的jot
。但是,除此之外,这里有一个应该能够执行序列的 hack:
end=3
for n in $(echo "for (i = 1; i <= $end; i++) i" | bc)
do
echo "$n"
done
任何 posix 兼容的 shell 都允许你迭代:
i=1
while expr $i \< 4 > /dev/null; do
echo $i
: $(( i + 1 ))
done
如果您有较旧的 shell,您可能需要将循环内的最后一行替换为
i=$( expr $i + 1 )
,并且在极少数情况下,您可能需要使用反引号。
您可以从 NetBSD pkgsrc 存储库获取 QNX 的 bash:ftp: //ftp.netbsd.org/pub/pkgsrc/packages/QNX/i386/6.5.0_head_20110826/shells/