如何将命令的输出存储到期望脚本中的数组中
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"
}
Expect
是 Tcl
的扩展,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
我对 expect 脚本知之甚少,但对如何为数组赋值有一些想法。 但是如何在我不知道 size.Say 的地方创建一个数组,我想将命令 'ls' 的输出存储在一个数组中,我如何在期望脚本
中实现这一点set myArray [exec ls]
for {set index 0} {$index < [array size myArray]} {incr index} {
send "echo $myArray($index)\r"
}
Expect
是 Tcl
的扩展,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