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

时间:2013-08-26 12:14:41

标签: 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++))  
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

但我收到了n的正确答案。适用于z_$j&amp; zup_$j我收到此错误:

'z_9=.8004633: command not found'  

我如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你的问题不是浮点数,而是你不能像这样建立一个变量名。如果您使用严格的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