なぜbashは010が8であると考えるのですか?


17

なぜbashは数字010 = 8と考えるのですか?

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

私はそれがバイナリかもしれないと思ったが、010 = 10 =2。だからそれがなぜ8になるのか、どうすれば010 = 10(そして010-2 = 8)と考えることができるのか?


15
リーディング0は、8進数であることを示します。あなたがちょうどそうするならx=10、echo $((x+0))それから示します10。また、余分のための必要はありません$中では()。
— テランス

2
多くの数値パーサーで010は、8を意味します。これは、一部の言語での配置が16進数を意味するの0と同様に、前に8進数を意味するため0xです。
— デレク朕會功夫

9
これは実際にプログラミングする際に知っておくべき重要なことです。ほとんどの言語では0、8進数、0x16 進数、および0b2 進数がトリガーされます。
— セス

投票権の説明?
— ティム

3
@timなぜ8でないのでしょうか?;-)ああ、私の投票ではなく、おそらくそれがあまりにも基本的だからでしょう。それはかなり正常な動作です。
— リンツウィンド

回答:


42

aで始まる番号シーケンス0は、8進数として解釈されます。
8 10進数= 10進数8。

bashを取得して10進数として扱うには、先頭のゼロを削除するか、次のように10進数を強制します

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

通常、すべて10のベースで機能します。必要なベースに置き換えるだけです。

N=[base#]n

それを解決する2つの方法で質問を編集しました。
— パビ

1
@Timを行うには、$ {N%?}を使用して最後の桁を
— 切り取り

@Timもしそうなら私は方法を理解できませんでした。$ {$ {N%?}:-0}はzshで機能しますが、bashまたはkshでは機能しません。(また、:-上記の私のコメントでは:-0}でなければなりません
— でした

答えには、「[base#] nの形式で任意のベースを強制できることを含める必要があります。ここで、baseは算術ベースを表す2〜64の10進数で、nはそのベースの数です」source:bash ref
— djeikyb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.