
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 seq
Befehl 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
bash
kann nur Ganzzahlarithmetik ausführen. bc
Fü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[@]}"