if { $buff match {*$APP$i*} } {
O que é match
? Existe nada na documentação expr
que usa esse termo. Além disso, de onde vem a variável APP
? Você tem APP1
e assim por diante, mas não APP
.
O grupo de comandos string
pode corresponder a uma string com string match
, e um array
(que outras línguas chamam de matriz hash ou associativa) provavelmente melhor agrupa os nomes de aplicativo (nó?) em vez de tentar usar uma variável como um nome de variável:
set theapps(app1) foo
set theapps(app2) bar
set theapps(app3) zot
set buff "blah bar blah"
foreach {name value} [array get theapps] {
if {[string match "*$value*" $buff]} {
puts "ok - $name $value"
} else {
puts "not ok - $name $value"
}
}
Quando executado, corresponde a bar
para app2
:
$ tclsh choices
not ok - app3 zot
not ok - app1 foo
ok - app2 bar
$
Uma segunda opção é usar uma lista de itens para procurar. Isso pode ser feito deslocando os nomes que não são do aplicativo para fora dos argumentos e, em seguida, fazendo o loop dos itens restantes:
proc shift {list} {
set result ""
upvar 1 $list ll
set ll [lassign $ll result]
return $result
}
set HOST [shift argv]
set USER [shift argv]
set PASSWORD [shift argv]
puts "leading args: >$HOST< >$USER< >$PASSWORD<"
set buff "blah bar blah"
foreach substr $argv {
if {[string match "*$substr*" $buff]} {
puts "match >$buff< on >$substr<"
}
}