将TCL exec命令的结果导入数组

时间:2017-04-27 18:09:22

标签: tcl exec

如何将tcl exec命令的结果放入一个字符串数组中,其中每个项目都是我的exec输出行?

示例:

exec ls -la

如何将结果捕获到数组中并在foreach中打印?

1 个答案:

答案 0 :(得分:2)

我可以建议你使用list而不是array吗?如果是的话......

set output [exec ls]
set output_list [split $output \n]
foreach line $output_list {
   puts $line
}

在这种情况下,List是更有用的集合,因为你需要的只是逐行存储行。另一方面,Tcl中的数组用于存储命名集合(无顺序)。

我可以用数组制作它,但它会很难看。

set output [exec ls]
set output_list [split $output \n]
set i 0
foreach line $output_list {
   set arr($i) $line
   incr i
}
foreach index [array names arr] {
    puts $arr($index)
}

正如您所看到的,foreach for arrays无法保证记录的顺序。例如,我有这个

% foreach index [array names arr] {
    puts arr($index)
}
arr(8)
arr(4)
arr(0)
arr(10)
arr(9)
arr(5)
arr(1)
arr(6)
arr(2)
arr(7)
arr(3)

因此,如果您想使用数组,因为它是有序集合,您需要使用计数器。

for {set i 0} {$i < [array size arr]} {incr i} {
   puts $arr($i)
}