Die Führung 0sagt, es soll oktal sein. Wenn Sie das tun nur x=10dann echo $((x+0))dann zeigen 10. Auch gibt es keine Notwendigkeit für den zusätzlichen $mit in der ().
Terrance
2
In vielen Zahlen-Parsern 010bedeutet 8, weil ein 0vorangestelltes Oktal bedeutet, ähnlich wie 0xin einigen Sprachen Hex bedeutet.
Derek 朕 朕 功夫
9
Dies ist eigentlich eine wichtige Sache, die Sie beim Programmieren wissen müssen. In den meisten Sprachen werden 0Oktal, 0xHex und 0bBinär ausgelöst.
Seth
Erklärungen ablehnen?
Tim
3
@tim warum sollte es nicht 8 sein? ;-) Oh nicht mein Downvote aber wahrscheinlich weil es zu einfach ist. Es ist ziemlich normales Verhalten.
Rinzwind,
Antworten:
42
Zahlenfolgen, die mit a beginnen, 0werden als Oktalzahlen interpretiert.
Oktal 10= dezimal 8.
Entfernen Sie die führende Null oder erzwingen Sie die Dezimalstelle mit:
N=010
N=$((10#$N))
Im Allgemeinen funktioniert das für alle Basen. Ersetzen 10Sie einfach die durch die gewünschte Basis:
Bearbeitet die Frage mit zwei Möglichkeiten, um es zu lösen.
Pabi
1
@Zu diesem Zweck können Sie mit $ {N%?} Die letzte Ziffer
abschneiden
@ Tim, wenn ja, ich konnte nicht herausfinden, wie. $ {$ {N%?}: - 0} funktioniert in zsh, aber nicht in bash oder ksh. (Auch :-in meinem Kommentar oben hätte sein sollen :-0}
Random832
Sie sollten in Ihrer Antwort enthalten , dass Sie jede Base mit der zwingen können „ Form [base #] n, wobei Base eine Dezimalzahl zwischen 2 und 64 der arithmetischen Basis darstellt, und n eine Zahl in dieser Basis “ Quelle: bash ref
0
sagt, es soll oktal sein. Wenn Sie das tun nurx=10
dannecho $((x+0))
dann zeigen10
. Auch gibt es keine Notwendigkeit für den zusätzlichen$
mit in der()
.010
bedeutet 8, weil ein0
vorangestelltes Oktal bedeutet, ähnlich wie0x
in einigen Sprachen Hex bedeutet.0
Oktal,0x
Hex und0b
Binär ausgelöst.Antworten:
Zahlenfolgen, die mit a beginnen,
0
werden als Oktalzahlen interpretiert.Oktal
10
= dezimal8
.Entfernen Sie die führende Null oder erzwingen Sie die Dezimalstelle mit:
Im Allgemeinen funktioniert das für alle Basen. Ersetzen
10
Sie einfach die durch die gewünschte Basis:quelle
:-
in meinem Kommentar oben hätte sein sollen:-0
}