0

私はbashの初心者であり、このループのエラーを見つけることができません。bashは私に与えるだけsyntax error: ';' unexpectedで、あまり役に立ちません...

# log2(x) = ln(x) / ln(2)
for (( j=$(echo "l($i) / l(2)" | bc -l) ;
    $(echo "scale=$SCALE; j < (2*$i)" | bc) == 1 ;
    j=$(echo "scale=$SCALE; $j + 1/$step" | bc) ))
do
        foo...
done

私がやりたいのは、Cのような擬似コードを使用した次のようなものです。

integer i

for ( float j = log2(i) ; j < 2*i ; j += 1/8 )
    ...

たぶんこれを行うためのより良い方法があるでしょう、私は知りません。ここやGoogleで何も見つかりません...まあ、「構文エラー」を検索する解決策を見つけるのは難しいです。

4

1 に答える 1

3

このfor (( ... ))表記は、通常のBashコマンドではなく、シェルの算術表記を想定しています。(つまり、シェル演算はなどの拡張をサポートします$(...)が、これは完全な混乱のレシピです。)シェル演算は機能しないため(整数のみ)、次のwhileような-loopを使用することをお勧めします。 :

j=$(bc -l <<< "l($i) / l(2)")
while [[ $( bc <<< "scale=$SCALE; $j < 2 * $i" ) = 1 ]] ; do
    ...
    j=$(bc <<< "scale=$SCALE; $j + 0.125")
done
于 2012-11-09T19:25:01.733 に答える