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