Bash neden 010'un 8 olduğunu düşünüyor?


17

Bash neden 010 = 8 sayısını düşünüyor?

x=010
echo $x
  010
echo $(( x+0 ))
  8
echo $(( x-2 ))
  6

İkili olabileceğini düşündüm, ama 010 = 10 = 2. Öyleyse neden 8 oluyor ve nasıl 010 = 10 (ve 010 - 2 = 8) düşündürüyor?


15
Lider 0ona sekizli olduğunu söyler. Sadece yaparsanız x=10o echo $((x+0))zaman gösterir 10. Ayrıca, $ile ekstra gerek yoktur ().
Terrance

2
Birçok sayı ayrıştırıcısında, 0108 anlamına gelir , çünkü 0ön tarafa koyarak 0x, bazı dillerde yazmanın nasıl hex olduğu gibi sekizli anlamına gelir.
Derek 朕 會 功夫

9
Bu aslında programlama sırasında bilinmesi gereken önemli bir şeydir. Çoğu dilde 0sekizlik, 0xonaltılık ve 0bikilik tetikler .
Seth

Downvote açıklamaları?
Tim

3
@tim neden 8 değil? ;-) Oh olsa benim downvote değil ama muhtemelen çok temel olduğu için. Oldukça normal bir davranış.
Rinzwind

Yanıtlar:


42

A ile başlayan sayı dizileri 0sekizli sayılar olarak yorumlanır.
Sekizlik 10= ondalık 8.

Bash karakterine ondalık sayı olarak davranmasını sağlamak için önde gelen sıfırı kaldırın veya ondalık basamakları zorlayın:

N=010
N=$((10#$N))

Genellikle tüm üsler için işe yarar, sadece 10istediğiniz üs ile değiştirin :

N=[base#]n

Soruyu çözmek için iki yolla düzenledi.
Pabi

1
@ Bunu yapmak için son basamağı doğramak için $ {N%?} Ve sonra boş karakteri 0 ile değiştirmek için $ {N: -} kullanabilirsiniz.
Random832

@ Eğer öyleyse nasıl olduğunu anlayamadım. $ {$ {N%?}: - 0} zsh ile çalışıyor ancak bash veya ksh ile çalışmıyor. (Ayrıca, :-yukarıdaki benim yorumda olmalıydı :-0}
Random832

Cevabınıza " form [base #] n ile herhangi bir tabanı zorlayabileceğinizi eklemeniz gerekir; burada taban, aritmetik tabanı temsil eden 2 ile 64 arasında bir ondalık sayıdır ve n bu tabandaki bir sayıdır " kaynak: bash ref
djeikyb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.