下面的代码片段从摘要主机获取 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]
我输入的正则表达式不匹配。有人可以帮忙吗?
答案 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风格的匹配,例如大多数人都熟悉文件名处理,但这在这里并不是一个正确的工具。)