具有浮点值和 bc 的类似 C 的 for 循环,意外";"

  • 本文关键字:for 循环 意外 bc bash
  • 更新时间 :
  • 英文 :


我是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上找不到任何内容...好吧,很难找到搜索"语法错误"的解决方案。

for (( ... ))符号期望壳算法表示法,而不是常规的bash命令。(我的意思是,Shell Arithmetic确实支持诸如$(...)之类的扩展,但这是令人困惑的秘诀。)由于Shell Arithmetic对您不起作用(仅适用于整数),因此最好使用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

相关内容

  • 没有找到相关文章

最新更新