我是一个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 )
...
也许有更好的方法可以做到这一点,我不知道。在这里或在谷歌上找不到任何东西......好吧,很难找到一个搜索“语法错误”的解决方案。
答案 0 :(得分:3)
for (( ... ))
表示法需要shell算术表示法,而不是常规的Bash命令。 (我的意思是,shell算法确实支持$(...)
之类的扩展,但这是一个完全混淆的秘诀。)因为shell算法不适合你(它只适用于整数) ,你最好使用while
- 循环,如下所示:
j=$(bc -l <<< "l($i) / l(2)")
while [[ $( bc <<< "scale=$SCALE; $j < 2 * $i" ) = 1 ]] ; do
...
j=$(bc <<< "scale=$SCALE; $j + 0.125")
done