TCL脚本中使用的regexp表达式中的变量不匹配

时间:2018-07-11 10:26:40

标签: regex variables tcl

下面的代码片段从摘要主机获取 agent 容器ID,并将其与登录 agent 容器时获得的容器ID匹配。 这是为了验证代理容器登录是否成功

   set var_op1 [VIR-APP exec "docker ps -aqf \"name=agent\""]

   set docker_op [VIR-APP exec "docker exec -it agent /bin/bash"]

   set var_op2 [VIR-APP exec "uname -a"]

   set result [regexp -nocase ".*$var_op1.*" $var_op2 match]

我输入的正则表达式不匹配。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以使用string first命令更简单地检查一个字符串是否在另一个字符串内:

if {[string first $var_op1 $var_op2] >= 0} {
    # The $var_op1 string was found inside $var_op2
}

然而,您可能会发现此操作失败,因为在var_op1中检索值的结果包含多余的空格(例如,尾随换行符)。因此,您可能实际上想做:

if {[string first [string trim $var_op1] $var_op2] >= 0} {
    # The $var_op1 string was found inside $var_op2
}

(我相信这是导致regexp搜索出现问题的原因,但是任何其他元数据字符也会引起问题;最好在这里使用string first。如果失败,还{ {1}},它使用glob风格的匹配,例如大多数人都熟悉文件名处理,但这在这里并不是一个正确的工具。)