美文网首页
shell脚本map键key的限制

shell脚本map键key的限制

作者: 牙齿不帅 | 来源:发表于2020-02-29 18:47 被阅读0次

shell的map存key是有限制的。
1.不能含有特殊的字符。
2.存字母的时候会按照0处理,所有后一个会把前一个覆盖。
3.只能是数字,shell的数字类型应该是long类型【不信的可以自己验证一下,没有验证是否跟操作系统相关】,所以最大值:9223372036854775807,当你存9223372036854775808的时候就会报错。
如:

#!/bin/sh

declare -a map
map["9223372036854775808"]=9223372036854775808
for key in  ${!map[*]}
do
    echo $key "-" ${map[$key]}
done 
输出:
./map.sh: line 4: map["9223372036854775808"]: bad array subscript

但是你存一个远远超过其长度的数却可以:

#!/bin/sh

declare -a map
map["206430424820643042482127182718271827127182718271872182781728172"]=9223372036854775808
for key in  ${!map[*]}
do
    echo $key "-" ${map[$key]}
done 
输出:
6051852071688983980 - 9223372036854775808
map["9223372036854775808111111"]=9223372036854775807
输出:
111111 - 9223372036854775807
map["9223372036854775807111111"]=9223372036854775807
输出:
./map.sh: line 9: map["9223372036854775807111111"]: bad array subscript

总结:

我没有确切找到key生成的规律,我只知道9223372036854775808和9223372036854775807是一个敏感的数字,9223372036854775807以内的不散列key,9223372036854775808111111的会去掉9223372036854775808直接用111111,至于怎么散列的不得而知。

注意:

大于19位数字可能会报错,如下,但报不报错不是确定的,跟前19位的数有关系。为啥报错,只能看源码了。

map["11111111111111111111"]=7 //20个1
map["12345678901234567890"]=7 //20个
输出:
bad array subscript

以上,如有知道怎么回事的朋友请告诉我哦~~

相关文章

网友评论

      本文标题:shell脚本map键key的限制

      本文链接:https://www.haomeiwen.com/subject/fykmhhtx.html