如何将tcl exec命令的结果放入一个字符串数组中,其中每个项目都是我的exec输出行?
示例:
exec ls -la
如何将结果捕获到数组中并在foreach中打印?
答案 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)
}