0

我正在尝试使用以下命令在 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&zup_$j 我收到此错误:

'z_9=.8004633: command not found'  

我该如何解决这个问题?

4

1 回答 1

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
于 2013-08-26T12:46:49.403 回答