次の例は両方とも最新の 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 シェルで同じシーケンスを生成する別の方法はありますか?
expr
ハッキングをシミュレートするための簡単な回避策を次に示します。
yes |
head -n 3 |
nl |
while read i yes; do
....
done
の値を気にしない場合は、行番号を削除i
できます。nl
QNX シェルで動作するメソッドを見つけました。
integer i=0
while ((i<4)); do i=i+1; echo $i; done
posix準拠のシェルであれば、次のことを繰り返すことができます。
i=1
while expr $i \< 4 > /dev/null; do
echo $i
: $(( i + 1 ))
done
古いシェルを使用している場合は、ループ内の最後の行をに置き換える必要が
i=$( expr $i + 1 )
あります。まれに、バックティックを使用する必要がある場合もあります。
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
NetBSD pkgsrc リポジトリから QNX 用の bash を取得できます: ftp://ftp.netbsd.org/pub/pkgsrc/packages/QNX/i386/6.5.0_head_20110826/shells/