方程式出力からの配列作成

方程式出力からの配列作成

たとえば、1 から 5 までのすべての整数を 8 で割って、配列に入れたいとします。以下のコードに似たものを考えていましたが、これは間違いなく間違っていて汚いです。

 COUNTER=0
 until [  $COUNTER -lt 8 ]; do
        ${steps[$COUNTER]}=1+(5-1)/8*$COUNTER
        let COUNTER+=1
 done

コードが正しい場合、これをきれいに実行する方法はありますか?

答え1

コマンドはseq浮動小数点数で増加できます:

declare -a steps=($(seq 1 .5 5))

増分は次のように取得できます。echo 'scale=1;(5-1)/8'|bc

答え2

はい、しかし bash は浮動小数点演算を行わないので、別のツールを使用してその出力を bash 配列に保存する必要があります。例:

$ perl -le 'print $_/8 for 1..5' 
0.125
0.25
0.375
0.5
0.625

次のように配列に保存します:

array=( $(perl -le 'print $_/8 for 1..5') )

答え3

bash整数演算のみ実行できます。bc浮動小数点数の場合は以下を使用します。

from=1
to=5
steps=8
for c in $(seq 0 $steps) ; do
    ar[c]=$(echo $(bc -l <<< "$from + ($to - $from) / $steps * $c"))
done
echo "${ar[@]}"

関連情報