let "b64 = 64#@_" # the result is 4011
echo "b64 = $b64" # is 4011
我們是如何得到這樣的結果。 有誰知道什麼是基礎符號,以及我們如何得到這個結果?我在哪裏可以讀到關於這個符號的內容?
let "b64 = 64#@_" # the result is 4011
echo "b64 = $b64" # is 4011
我們是如何得到這樣的結果。 有誰知道什麼是基礎符號,以及我們如何得到這個結果?我在哪裏可以讀到關於這個符號的內容?
根據下算術擴展第三段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」的結果。我相信這只是你的問題中的一個錯字。
如果您輸入help let
,bash會告訴您有關let
命令。它告訴bash將每個參數評估爲算術表達式。
The bash reference manual解釋了64#@_
意味着:
號碼所以你的指令分配一個數值來命名常量解釋爲八進制數。領先的'
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)
據我所知,號碼前#是數字。然而我的問題是我可以在哪裏得到一個表格 - &,@ ._等等 – osamuyl
@osamuyl 0-9分別是0-9。 a-z是10-35。 A-Z是36-61。 @是62. _是63.由於64是bash可以處理的最大基數,因此不允許其他字符。 – kojiro
明白了。問題已關閉 – osamuyl