如何在shell脚本中计算浮点数?

如何在shell脚本中计算浮点数?,shell,Shell,我试图用以下命令计算shell中的一些浮点数: zmin='0.004633' zmax='3.00642' step='0.1' echo "zmin=$zmin" echo "zmax=$zmax" echo "step=$step" n=`echo "(($zmax - $zmin)) / $step " |bc -l ` b=${n/\.*} echo "b=$b" for ((j = 1; j <= b; j++)

我试图用以下命令计算shell中的一些浮点数:

zmin='0.004633'          
zmax='3.00642'  
step='0.1'  
echo "zmin=$zmin"        
echo "zmax=$zmax"  
echo "step=$step"  
n=`echo "(($zmax - $zmin)) / $step " |bc -l `  
b=${n/\.*}  
echo "b=$b"  

for ((j = 1; j <= b; j++))  
do  
    z_$j=`echo  "scale=7; (($zmin + $(($j-1)))) * $step" |bc -l`  
    zup_$j=`echo  "scale=7; $((z_$j)) + $step " |bc -l `  
    echo "z_$j=$((z_$j)) && zup_$j=$((zup_$j))"
done

我怎样才能解决这个问题

您的问题不是浮点,而是无法构建这样的变量名。如果您使用的是严格的POSIX shell,则需要使用
eval
来执行此操作:

tmp=$( echo "scale=7; ( $zmin + $j - 1 ) * step" | bc -l )
eval "z_$j=$tmp"
但是,您正在使用的for循环不是POSIX特性,这意味着您正在使用
bash
或其他一些也支持数组的shell,因此您应该使用一个

for ((j=1; j<=b; j++))
do
    z[j]=$( echo "scale=7; ( $zmin + $j - 1 ) * $step " | bc -l )
    zup[j]=$( echo "scale=7; ${z[j]} + $step" | bc -l )
    echo "z[$j]=${z[j]} && zup[$j]=${zup[j]}"
done

用于((j=1;jIs你为什么要用Bash来做这件事?这是不合适的。使用python或其他任何可以处理浮点运算的工具。需要维护你的代码的人会感谢你。你甚至可以用bc来完成所有的循环,所以也许可以把整件事写成一个bc命令。shell不会出现使您可以参数化环境变量集的l.h.s。
for ((j=1; j<=b; j++))
do
    z[j]=$( echo "scale=7; ( $zmin + $j - 1 ) * $step " | bc -l )
    zup[j]=$( echo "scale=7; ${z[j]} + $step" | bc -l )
    echo "z[$j]=${z[j]} && zup[$j]=${zup[j]}"
done