如何在tcl脚本中提取glob?

时间:2016-01-20 07:38:51

标签: tcl

我将一组文件存储到一个变量中并传递该变量,以便在变量A中获得重复且唯一的值。

set A "232 234 234 234"
set a 1
set files_name "/usr/test/a_232.txt /usr/test/a1_234.txt /usr/test/a2_234.txt /usr/test/a3_234.txt"

foreach j [split $A " "] {
    incr count($j)
}
foreach key [array names count] {
    if {$count($key) == 1} {
        set file_name1 [glob -type f $file_name {$key} ]
    } else {
        set file_name2 [glob -type f $file_name {$key} ]
    }
}

每当我执行上面的代码时,我都会得到以下错误

no files matched glob patterns "/usr/test/a_232.txt /usr/test/a1_234.txt /usr/test/a2_234.txt /usr/test/a3_234.txt"
    while executing
"glob -type f $file_list {$key} "

结果应该是这样的

file_name1 : /usr/test/a_232.txt
file_name2 :/usr/test/a1_234.txt /usr/test/a2_234.txt /usr/test/a3_234.txt

1 个答案:

答案 0 :(得分:0)

我认为你想要做的是这样的事情:

set A "232 234 234 234"
set files_name "/usr/test/a_232.txt /usr/test/a1_234.txt /usr/test/a2_234.txt /usr/test/a3_234.txt"

unset -nocomplain count
foreach j [split $A] {
    incr count($j)
}
foreach key [array names count] {
    if {$count($key) == 1} {
        set file_name1 [lsearch -regexp -inline $files_name $key]
    } else {
        set file_name2 [lsearch -regexp -inline -all $files_name $key]
    }
}

注意:file_name2的名称与文件名列表中的密钥匹配的名称一样多,这可能比A中出现的密钥更多或更少。

glob命令在文件系统中搜索文件名,而不是在文件列表中搜索。

文档:arrayforeachifincrlsearchsplitunset