tcl";开关-glob";与变量不匹配
我在Solaris和Linux上都遇到了这个问题,tcl版本为8.3/8.4 请参阅以下代码:tcl";开关-glob";与变量不匹配,tcl,switch-statement,glob,Tcl,Switch Statement,Glob,我在Solaris和Linux上都遇到了这个问题,tcl版本为8.3/8.4 请参阅以下代码: #!/usr/bin/tclsh set pattern "this is * and *" set str "this is tcl and c++" switch -glob $str { $pattern { puts "matched pattern" } "this is * and *" { puts "matched plain text" }
#!/usr/bin/tclsh
set pattern "this is * and *"
set str "this is tcl and c++"
switch -glob $str {
$pattern {
puts "matched pattern"
}
"this is * and *" {
puts "matched plain text"
}
default {
puts "matched none"
}
}
结果是“匹配的纯文本”。
我想它应该匹配$pattern。。。这是开关的错误用法,还是我没有为-glob选项提供正确的模式
请有人给一些想法,它是更好的,如果你能告诉如何修改代码,使其与开关和变量运行
谢谢!
XM我相信您误解了Tcl解析/替换的工作原理。具体而言,glob命令将获取以下参数:
1: -glob
2: $str
3: {
$pattern {
puts "matched pattern"
}
"this is * and *" {
puts "matched plain text"
}
default {
puts "matched none"
}
}
{…}构造将其中的内容“分组”为单个未替换(逐字)数据段。因此,switch的第三个参数包含“$pattern”,而不是用pattern变量的值替换$pattern的结果
如果你需要替换,你需要避免使用大括号(我正在简化)。因此,如果您真的想替换中的模式值,最简单的方法是使用另一种形式的开关(它作为单独的参数传入每个模式/代码块):
需要注意的是,在使用变量替换字符串进行匹配时,使用--(无更多标志)标志和开关几乎总是一个好主意。这避免了$str
包含以-
开头的内容的问题
switch -glob -- $str $pattern {
puts "matched pattern"
} "this is * and *" {
puts "matched plain text"
} default {
puts "matched none"
}
我相信您误解了Tcl解析/替换的工作原理。具体而言,glob命令将获取以下参数:
1: -glob
2: $str
3: {
$pattern {
puts "matched pattern"
}
"this is * and *" {
puts "matched plain text"
}
default {
puts "matched none"
}
}
{…}构造将其中的内容“分组”为单个未替换(逐字)数据段。因此,switch的第三个参数包含“$pattern”,而不是用pattern变量的值替换$pattern的结果
如果你需要替换,你需要避免使用大括号(我正在简化)。因此,如果您真的想替换中的模式值,最简单的方法是使用另一种形式的开关(它作为单独的参数传入每个模式/代码块):
需要注意的是,在使用变量替换字符串进行匹配时,使用--(无更多标志)标志和开关几乎总是一个好主意。这避免了$str
包含以-
开头的内容的问题
switch -glob -- $str $pattern {
puts "matched pattern"
} "this is * and *" {
puts "matched plain text"
} default {
puts "matched none"
}
Seeger,谢谢你的回答,它很有用。您关于tcl脚本如何被取代的言论也启发了很多人。非常感谢。很高兴我能帮上忙。老实说,“摸索”Tcl分组(引号和花括号)往往是Tcl新手的最大绊脚石。如果你不明白,你可能会在漫长的道路上犯错,导致很多痛苦。如果你真的明白了,语言中几乎所有的东西都很简单。Seeger,谢谢你的回答,它很有用。您关于tcl脚本如何被取代的言论也启发了很多人。非常感谢。很高兴我能帮上忙。老实说,“摸索”Tcl分组(引号和花括号)往往是Tcl新手的最大绊脚石。如果你不明白,你可能会在漫长的道路上犯错,导致很多痛苦。如果你真的明白了,语言中几乎所有的东西都很简单。