2017-02-25 11 views
1

我正在创建一个数组并循环遍历数组,但由于某种原因,foreach命令正在向索引添加引号。TCL foreach正在向我的索引添加引号

我有以下代码初始化数组:

# Fill the region array for the 8 regions. 
set regionBBox(SDQ1) "11262.000 1558.700 15489.000 1663.000" 
set regionBBox(SDQ2) "6910.000 1558.700 11137.000 1663.000" 
set regionBBox(SDQ3) "1550.000 7929.260 1665.000 12159.000" 
set regionBBox(SDQ4) "1550.000 12283.820 1665.000 16511.000" 
set regionBBox(SDQ5) "6654.000 21241.580 11393.000 21352.000" 
set regionBBox(SDQ6) "11518.000 21241.580 16257.000 21352.000" 
set regionBBox(SDQ7) "21246.000 11773.100 21354.005 15999.000" 
set regionBBox(SDQ8) "21246.000 7418.540 21354.000 11647.000" 

时,我得到了整个名单无报价显示:

lsort [array names regionBBox] 

结果:

SDQ1 SDQ2 SDQ3 SDQ4 SDQ5 SDQ6 SDQ7 SDQ8 

但是,当我通过数组遍历每个$ id的值包含双引号。

foreach $id [lsort [array names regionBBox]] { 
    echo "Index = $id" 
    set bbox $regionBBox($id) 
} 

结果:

Index = "SDQ6" 
Error: can't read "regionBBox("SDQ6")": no such element in array 

那么,为什么的foreach加上引号?我如何避免添加引号?

+0

卫生署!愚蠢的菜鸟错误。我有$ id,我应该只有id。 – LivingDust

+0

请注意'echo'是一个shell命令。它将在交互式tclsh会话中按照您的预期工作,但不会在tcl脚本中运行。 –

回答

2

这是一个愚蠢的新手错误:我有一个“$ id”的foreach,我应该只有“id”。这里是固定的代码:

foreach id [lsort [array names regionBBox]] { 
    echo "Index = $id" 
    set bbox $regionBBox($id) 
} 

导致:

Index = SDQ1 
Index = SDQ2 
Index = SDQ3 
Index = SDQ4 
Index = SDQ5 
Index = SDQ6 
Index = SDQ7 
Index = SDQ8