我找到了一个优雅的解决方案,没有运气。最终,我需要创建一些固定长度(3个字符)的唯一ID(在一台机器上),以字母开头,并且只包含数字或大写字母。 (例如AXX,其中X可以是数字或字母)
我正在使用mktemp实用程序生成唯一ID。 问题:mktemp创建了区分大小写的临时文件名。
目前,我存储了在一个Diretory中生成的每个临时文件“GeneratedFile”。然后,我创建一个不区分大小写的文件版本,并将其存储在目录“ExistingID”中。每次调用mktemp时,我都会检查生成的文件是否在ExistingID目录中具有不区分大小写的对应项。如果是,我继续调用mktemp,直到我生成一个当前没有用作唯一ID的文件名。
有更好的方法吗?
答案 0 :(得分:0)
你没有提到它有多独特 - 在一台机器上是独一无二的?在网络上? 有字母吗?如果只有数字是可以的,那么一个简单的方法可能是使用当前系统时间戳,只要您在一个特定实例上不需要多个唯一字符串。甚至可以通过md5将其转换为固定长度的字母数字字符串。
答案 1 :(得分:0)
这几乎看起来太容易了,
mktemp AXX | tr 'a-z' 'A-Z'
这可能会在tr
之后产生非唯一名称是一个好的名称,但是看,有什么理由嘿他妈的需要是唯一的随机吗?为什么不按字典顺序生成它们呢?
# pseudobash, untested
digit1=0
digit2=0
chars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
function nextName {
str= "A" chars[digit2] chars[digit1]
((digit1++))
if digit1 > 35
then
((digit2++))
digit1=0
fi
return str
}