Mögliches Duplikat:
Wie kann ich in Bash oder einer anderen verfügbaren Sprache über die Befehlszeile Ganzzahl- und Gleitkommaberechnungen durchführen?
Ich möchte in einem Bash-Skript einfach eine Variable neu zuweisen (genauer gesagt, sie um erhöhen 0.050
). In dem folgenden Skript, das ich geschrieben habe, i
ist ein (Integer-)Index und mytime
eine Dezimal-/Double-/Float-Zahl. „ps“ (Pikosekunde) ist die Zeiteinheit, die ich in meinen Berechnungen verwende.
#!/bin/bash
mytime = 0.000
for i in {1..3}
do
echo "$i: $mytime ps"
mytime = mytime + 0.050
done
Aber wenn ich dieses Skript mit ausführe bash test.sh
, erhalte ich diese Fehlermeldungen:
test.sh: line 2: mytime: command not found
1: ps
test.sh: line 6: mytime: command not found
2: ps
test.sh: line 6: mytime: command not found
3: ps
test.sh: line 6: mytime: command not found
mytime
Warum wird es anscheinend als Befehl oder Funktion interpretiert und nicht als Variable? Können Sie mir bitte helfen, das zu korrigieren?
Antwort1
for i in $(seq 1 0.05 3); do
# loop body
echo i equals $i
done
Antwort2
Zwei Probleme:
- Verwenden Sie keine Leerzeichen. Eine Zuweisung ist
VAR=value
, nichtVAR = value
,VAR =value
oderVAR= value
. Es muss sich um ein durch Leerzeichen getrenntes Shell-Token handeln, nicht um zwei oder drei). - Die Shell führt solche Arithmetik nicht aus. Für ganzzahlige Mathematik können Sie sagen
VAR=$(($VAR+1))
, oder Sie können diese hervorragende Frage für eine Unmenge anderer Möglichkeiten lesen (Ganzzahl, Gleitkomma, Infix, Postfix, möglicherweise sogar Präfix, beliebige Genauigkeit und alles Mögliche):wie kann ich in Bash oder einer anderen verfügbaren Sprache über die Befehlszeile Ganzzahl- und Gleitkommaberechnungen durchführen?