how to store the output of a command into an array in expect script

时间:2016-05-11 11:37:03

标签: expect

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" 
} 

1 个答案:

答案 0 :(得分:0)

ExpectTcl的扩展,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