0

次の例は両方とも最新の Bash で機能しますが、異なる sh シェル (QNX シェルなど) では機能しません。

$ 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 シェルで同じシーケンスを生成する別の方法はありますか?

4

5 に答える 5

1

exprハッキングをシミュレートするための簡単な回避策を次に示します。

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

の値を気にしない場合は、行番号を削除iできます。nl

于 2012-06-27T08:55:12.723 に答える
1

QNX シェルで動作するメソッドを見つけました。

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

posix準拠のシェルであれば、次のことを繰り返すことができます。

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

古いシェルを使用している場合は、ループ内の最後の行をに置き換える必要が i=$( expr $i + 1 )あります。まれに、バックティックを使用する必要がある場合もあります。

于 2012-06-25T16:38:26.430 に答える
0

seqまたはを使用しjotます。の代わりにバッククォートを使用する必要がある場合があります$()

for i in `seq 1 3`

for使用している QNX のバージョンのシェルが ksh の場合、C スタイルのループを使用できるはずです。

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

編集:

シェルとして ksh86 クローンを持つ QNX 4 をお持ちだと思います。seq私の意見では、これらの状況下で、またはを含めないのは脳死jotです。ただし、それはさておき、シーケンスを実行できるはずのハックを次に示します。

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

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 に答える