如何在Expect中判断变量是否包含指定字符串
Bash字符串匹配逻辑的Expect等效实现
Expect基于Tcl语言,语法规则和Bash差异较大,你原有代码的错误点和解决方案如下:
核心语法差异
- Tcl没有
=~运算符,通配符匹配使用string match命令,正则匹配使用regexp命令 - Tcl中控制语句的代码块左大括号必须和前半部分语句放在同一行,否则会被识别为独立命令触发报错
- Tcl中
[]用于执行内部命令,不要在普通变量引用外额外套[]
对应你原始Bash需求的等效代码
set VAR "ble something" # 通配符匹配,匹配规则和Bash的[[ $VAR == *something ]]一致 if {[string match "*something" $VAR]} { set VAR2 "XYZ" } else { set VAR2 "YYY" } puts $VAR2 # 输出结果为YYY,和你给出的Bash示例运行结果一致
你尝试的包含3的字符串匹配的修正代码
if {[string match "*3*" $VAR]} { set VAR2 "XYZ" puts $VAR2 } else { set VAR2 "YYY" puts $VAR2 }
如果你需要使用正则匹配,替换string match为regexp即可,比如匹配任意位置包含3的正则写法为:
if {[regexp {3} $VAR]} { # 匹配成功的逻辑 }
内容的提问来源于stack exchange,提问作者Irka Irenka
相关产品推荐
相关产品推荐

