如何将命令的输出存储到期望脚本中的数组中

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

我对 expect 脚本知之甚少,但对如何为数组赋值有一些想法。 但是如何在我不知道 size.Say 的地方创建一个数组,我想将命令 'ls' 的输出存储在一个数组中,我如何在期望脚本

中实现这一点
set myArray [exec ls] 
for {set index 0} {$index < [array size myArray]} {incr index} {
    send "echo $myArray($index)\r" 
} 

ExpectTcl 的扩展,Tcl 的数组本质上是关联的。无需指定数组的大小。

您可以直接向数组中添加一个元素及其对应的数组索引。不必以 0,1,2... 等开头。也可以是字符串。

数组可以解释为键->值对。

set userInfo(name) Dinesh
set userInfo(year) 2016
set useInfo(language) Tcl

% parray userInfo
userInfo(language) = Tcl
userInfo(name)     = Dinesh
userInfo(year)     = 2016
%

比如说,你正在通过exec命令执行命令ls。我们都知道,简单地执行 ls 命令将为我们提供文件和文件夹名称列表。但是,对于 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)"
}

除了上面的foreach,你也可以使用parray本身。但是,结果不会是整数排序格式。

更新 1:

您应该使用 glob 命令来获取文件列表。

set files [glob -type f *]
foreach file $files {
    send "echo $file\r"
}

参考: array