我正试图用这些命令计算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'
我如何解决这个问题?
答案 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