Array-Erstellung aus der Gleichungsausgabe

Array-Erstellung aus der Gleichungsausgabe

Ich möchte beispielsweise alle Ganzzahlen von 1 bis 5 durch 8 teilen und in ein Array einfügen. Ich dachte dabei an etwas Ähnliches wie den folgenden Code, bin mir aber sicher, dass er falsch und unsauber ist:

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

Gibt es eine Möglichkeit, dies sauber durchzuführen, wenn mein Code überhaupt korrekt ist?

Antwort1

Der seqBefehl kann um eine Gleitkommazahl erhöht werden:

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

Den Zuwachs erhältst du mitecho 'scale=1;(5-1)/8'|bc

Antwort2

Ja, aber da Bash keine Gleitkommaarithmetik unterstützt, müssen Sie ein anderes Tool verwenden und dessen Ausgabe im Bash-Array speichern. Beispiel:

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

Speichern in einem Array mit:

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

Antwort3

bashkann nur Ganzzahlarithmetik ausführen. bcFür Gleitkommazahlen verwenden:

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[@]}"

verwandte Informationen