0

これらのコマンドを使用して、シェルでいくつかの浮動小数点数を計算しようとしています:

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

しかし、私は正しい答えを受け取りますnz_$j&についてzup_$j は、次のエラーが表示されます:

'z_9=.8004633: command not found'  

どうすればこの問題を解決できますか?

4

1 に答える 1

1

問題は浮動小数点ではありません。このような変数名を作成できないことです。厳密な POSIX シェルを使用している場合は、次のようにする必要がありますeval

tmp=$( echo "scale=7; ( $zmin + $j - 1 ) * step" | bc -l )
eval "z_$j=$tmp"

ただし、使用している for ループは POSIX 機能ではありません。これは、bashまたは配列もサポートする他のシェルを使用していることを意味するため、1 つを使用する必要があります。

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 に答える