0

以下两个示例都适用于现代 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 中产生相同的序列?

4

5 回答 5

1

我找到了一个在 QNX shell 中工作的方法:

integer i=0
while ((i<4)); do i=i+1; echo $i; done
于 2012-06-27T08:27:54.603 回答
1

expr这是一个模拟黑客攻击的简单解决方法。

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

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

于 2012-06-27T08:55:12.723 回答
0

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

for i in `seq 1 3`

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

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

编辑:

我现在猜你有 QNX 4,它有一个 ksh86 克隆作为它的外壳。在我看来,在这种情况下,不包括seqor是脑死的jot。但是,除此之外,这里有一个应该能够执行序列的 hack:

end=3
for n in $(echo "for (i = 1; i <= $end; i++) i" | bc)
do
    echo "$n"
done
于 2012-06-25T11:20:57.860 回答
0

任何 posix 兼容的 shell 都允许你迭代:

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

如果您有较旧的 shell,您可能需要将循环内的最后一行替换为 i=$( expr $i + 1 ),并且在极少数情况下,您可能需要使用反引号。

于 2012-06-25T16:38:26.430 回答
0

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

于 2016-09-06T16:00:20.957 回答