2012-11-09 33 views
0

我是一个bash的初学者,在这种循环,我不能找到这个错误,和bash只是给了我​​,不是真的有用...类似C的for循环浮点值和bc,意外的“;”

# 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) 
    ... 

也许有更好的方法来做到这一点,我不知道。在这里或谷歌找不到任何东西......好吧,很难找到一个搜索“语法错误”的解决方案。

回答

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 
+0

壳牌算术也只支持整数! –

+0

@tc .:我不确定我是否遵守;我的答案的哪一部分是你评论的? (请注意,我也* *写“壳算术不会为你工作(这只是为整数)。”) – ruakh

+0

哎呀,错过了位:) –