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

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

4

1 回答 1

3

for (( ... ))符号需要 shell 算术符号,而不是常规的 Bash 命令。(我的意思是,shell 算术确实支持诸如 之类的扩展$(...),但这是一个完全混淆的秘诀。)由于 shell 算术对你不起作用(它只适用于整数),你最好使用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 回答