Wenn ich Folgendes in ein Bash-Terminal schreibe:
A="0012"
B=$((A+1))
echo $B
Ich bekomme 11, nicht 13, wie ich erwartet hatte !!!!!
Ich habe herumgegoogelt und kann es überhaupt nicht erklären oder herausfinden, wie ich die Zahl erhöhen kann. (Eigentlich möchte ich am Ende B = "0013" haben und jedes Mal eins erhöhen, wenn ich dies als Präfix für meine Backups verwende.)
Antworten:
Das liegt daran, dass Zahlen, die mit beginnen, von
0
als Oktal behandelt werdenbash
, daher wird eine Oktaladdition (Basis 8) durchgeführt. Um die Dezimaladdition für diese Struktur zu erhalten, müssen Sie die Basis explizit definieren oder nicht zusammen verwenden00
.Für Decimal ist die Basis 10, angegeben durch
10#
:quelle
Sie können diesen Befehl versuchen, um die Antwort zu erhalten:
Weitere Informationen zum
bc
Befehl finden Sie hier .bc
Manpage:quelle
echo
und einer Pipe können Sie auch die "here string" -Syntax von Bash verwenden. Der Effekt ist der gleiche, aber meiner Meinung nach ist der "Hier-String" schöner:bc <<< "$A + 1"
:-)bc
Befehls mit ein oder zwei Sätzen zusätzlich zu einemhere
Link wäre hilfreich.Eine alternative Methode kann darin bestehen, Ihre Variablen als Ganzzahlen beizubehalten und sie am Ende in eine Zeichenfolge zu konvertieren:
Diese Art der Arbeit mit Ganzzahlen in Mathematik und das Umwandeln in Zeichenfolgen für die Antwort ist für mich intuitiver, da ich an die BASIC-Programmierung gewöhnt bin. Ich schätze, dass Bash keine Variablentypen wie C und BASIC hat, aber so zu tun, als wäre ich glücklich.
quelle
A="0012"; A=$((10#$A))