TCL 使用变量作为键名获取数组值

TCL get array value using variable as key name

我有以下数组列表,其中包含 IANA 密码套件 ID(密钥名称)及其相应名称(值)

array set IANA_Ciphers [list {0000} {"TLS_NULL_WITH_NULL_NULL"} \
        {0001} {"TLS_RSA_WITH_NULL_MD5"} \
        {0002} {"TLS_RSA_WITH_NULL_SHA"} \
        {0003} {"TLS_RSA_EXPORT_WITH_RC4_40_MD5"} \
        [...]
        {C0AF} {"TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8"} ]

现在我需要能够动态访问此数组的值,但是当我使用以下代码时出现错误“无法读取 "IANA_Ciphers(0000)":数组中没有这样的元素"

set ciphers "000000010002"
set tmp [string range $ciphers 0 3] ;# which gives "0000"
puts $IANA_Ciphers($tmp) ;# throws the error

我做错了什么?

感谢和问候

您应该将变量设置为

set ciphers "000000010002"

更新 2

我不知道您在 array set 命令中添加的大括号是否有错字。

array set IANA_Ciphers [list {0000} {"TLS_NULL_WITH_NULL_NULL"} \
        {0001} {"TLS_RSA_WITH_NULL_MD5"} \
        {0002} {"TLS_RSA_WITH_NULL_SHA"} \
        {0003} {"TLS_RSA_EXPORT_WITH_RC4_40_MD5"} \
        [...]
        {C0AF} {"TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8"} ]
} # This '}' is not needed at all.

你应该得到错误,因为

--------
invalid command name "}"
    while executing
"}"

顺便说一句,没有那个,我已经尝试了你的代码,它对我来说工作正常。

array set IANA_Ciphers [list {0000} {"TLS_NULL_WITH_NULL_NULL"} \
        {0001} {"TLS_RSA_WITH_NULL_MD5"} \
        {0002} {"TLS_RSA_WITH_NULL_SHA"} \
        {0003} {"TLS_RSA_EXPORT_WITH_RC4_40_MD5"} \
        {C0AF} {"TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8"} ]

set ciphers "000000010002"
set tmp [string range $ciphers 0 3] ;# which gives "0000"
puts "Key : $tmp"
puts "Value : $IANA_Ciphers($tmp)" 

输出:

Key : 0000
Value : "TLS_NULL_WITH_NULL_NULL"