Prowadzący 0mówi, że jest ósemkowy. Jeśli po prostu zrobić x=10następnie echo $((x+0))następnie pokazy 10. Ponadto nie ma potrzeby stosowania dodatkowej opcji $w ().
Terrance
2
W wielu parserach liczb 010oznacza 8, ponieważ wstawienie z 0przodu oznacza liczbę ósemkową, podobnie jak 0xw niektórych językach oznacza hex.
Derek 朕 會 功夫
9
Jest to właściwie ważna rzecz, którą należy wiedzieć podczas programowania. W większości języków 0wyzwala liczbę ósemkową, 0xszesnastkową i 0bbinarną.
Seth
Objaśnienia?
Tim
3
@tim dlaczego miałoby to nie być 8? ;-) Ale nie moja opinia, ale prawdopodobnie dlatego, że jest zbyt podstawowa. To jest całkiem normalne zachowanie.
Rinzwind,
Odpowiedzi:
42
Sekwencje liczb zaczynające się od a 0są interpretowane jako liczby ósemkowe.
Oktalowy 10= dziesiętny 8.
Aby bash traktował go jako liczbę dziesiętną, usuń wiodące zero lub wymuś dziesiętne za pomocą:
N=010
N=$((10#$N))
Zasadniczo działa to dla wszystkich baz, wystarczy zastąpić 10bazę, którą chcesz:
Edytowałem pytanie na dwa sposoby, aby je rozwiązać.
Pabi
1
@ Czas, aby to zrobić, możesz użyć $ {N%?}, Aby posiekać ostatnią cyfrę, a następnie {N: -}, aby zamienić puste na 0.
Random832
@ Czas, jeśli tak, nie mogłem wymyślić, jak to zrobić. $ {$ {N%?}: - 0} działa w zsh, ale nie w bash ani ksh. (Również :-w moim komentarzu powyżej powinno być :-0}
Random832
Powinieneś zawrzeć w swojej odpowiedzi, że możesz wymusić dowolną podstawę za pomocą „ formularza [baza #] n, gdzie podstawa jest liczbą dziesiętną między 2 a 64 reprezentującą podstawę arytmetyczną, a n jest liczbą w tej bazie ” źródło: bash ref
0
mówi, że jest ósemkowy. Jeśli po prostu zrobićx=10
następnieecho $((x+0))
następnie pokazy10
. Ponadto nie ma potrzeby stosowania dodatkowej opcji$
w()
.010
oznacza 8, ponieważ wstawienie z0
przodu oznacza liczbę ósemkową, podobnie jak0x
w niektórych językach oznacza hex.0
wyzwala liczbę ósemkową,0x
szesnastkową i0b
binarną.Odpowiedzi:
Sekwencje liczb zaczynające się od a
0
są interpretowane jako liczby ósemkowe.Oktalowy
10
= dziesiętny8
.Aby bash traktował go jako liczbę dziesiętną, usuń wiodące zero lub wymuś dziesiętne za pomocą:
Zasadniczo działa to dla wszystkich baz, wystarczy zastąpić
10
bazę, którą chcesz:źródło
:-
w moim komentarzu powyżej powinno być:-0
}