2016-11-30 57 views
3

我有網線什麼是在bash VAR = 64#@ _

let "b64 = 64#@_" # the result is 4011  
echo "b64 = $b64" # is 4011  

我們是如何得到這樣的結果。 有誰知道什麼是基礎符號,以及我們如何得到這個結果?我在哪裏可以讀到關於這個符號的內容?

回答

5

根據下算術擴展第三段man bash

如果省略基#,然後底座10使用。指定n時,大於9的數字將按照該順序由小寫字母,大寫字母@和_表示。如果基數小於或等於36,則小寫字母和大寫字母可以互換使用以表示10到35之間的數字。

字母表a-z + A-Z + 0-9中只有62位數字。還需要兩個。因此@和_只是數字的基數64表示中的數字。

$ echo "$((64#@))" 
62 
$ echo "$((64#_))" 
63 
$ echo "$((64#@@))" 
4030 
$ echo "$((64#@_))" 
4031 

我不能完全解釋「4011」的結果。我相信這只是你的問題中的一個錯字。

+0

據我所知,號碼前#是數字。然而我的問題是我可以在哪裏得到一個表格 - &,@ ._等等 – osamuyl

+0

@osamuyl 0-9分別是0-9。 a-z是10-35。 A-Z是36-61。 @是62. _是63.由於64是bash可以處理的最大基數,因此不允許其他字符。 – kojiro

+0

明白了。問題已關閉 – osamuyl

4

如果您輸入help let,bash會告訴您有關let命令。它告訴bash將每個參數評估爲算術表達式。

The bash reference manual解釋了64#@_意味着:

與一家領先的0

常量解釋爲八進制數。領先的'0x'或'0X'表示十六進制。否則,數字形式爲[base#] n,其中可選的基數是代表算術基數的2到64之間的十進制數,而n是該基數中的數字。如果base#被省略,則使用base10。當指定n時,大於9的數字按照小寫字母,大寫字母'@'和'_'的順序表示。如果鹼是小於或等於36,小寫和大寫字母可以互換地使用以表示10和35之間

號碼所以你的指令分配一個數值來命名 b64變量。在bash的base 64中, @是數值爲62的數字,而 _是數值爲63的數字,所以總值爲62×64 + 63×64 = 4031

(請注意,您錯誤地指出,結果是4011我使用bash版本4.2.48(1) - 釋放測試,並獲得4031)

相關問題