with little knowledge in expect scripting,I have some idea on how to assign values to an array. But how about creating an array where I don't know the size.Say,I want to store the output of the command 'ls' in an array,How do I achieve this in expect scripting
set myArray [exec ls]
for {set index 0} {$index < [array size myArray]} {incr index} {
send "echo $myArray($index)\r"
}
答案 0 :(得分:0)
Expect
是Tcl
的扩展,Tcl
的数组本质上是关联的。无需指定数组的大小。
您可以通过它相应的数组索引直接向数组添加元素。没有必要从0,1,2开始......依此类推。它也可以是一个字符串。
数组可以解释为key-&gt;值对。
set userInfo(name) Dinesh
set userInfo(year) 2016
set useInfo(language) Tcl
% parray userInfo
userInfo(language) = Tcl
userInfo(name) = Dinesh
userInfo(year) = 2016
%
说,您正在通过ls
命令执行命令exec
。我们都知道简单地执行ls
命令会给我们一个文件列表&amp;文件夹名称。但是,对于Tcl
数组,我们应该有一个键值对。我们需要每个值的索引。
例如,我们可以用数字定义数组索引,如0,1,2,...等等。
set output [exec ls]
for {set i 0} {$i<[llength $output]} {incr i} {
set result($i) [lindex $output $i]
}
foreach idx [lsort -integer [array names result]] {
puts "result($idx) = $result($idx)"
}
您也可以使用parray而不是上面的foreach
。但是,结果不会是整数排序格式。
更新1:
您应该使用glob
命令获取文件列表。
set files [glob -type f *]
foreach file $files {
send "echo $file\r"
}
参考: array