它实际上取决于文件系统(即操作系统),因为file exists
它只是围绕操作系统的基本文件存在测试的一个薄包装器。经典的 Unix 文件系统大多区分大小写,而 Windows 文件系统通常不区分大小写。这意味着通常最好在编写代码时小心处理事情的情况;您可能应该考虑string tolower
在预期的情况下使用来获取频道名称(因为我认为 IRC 频道名称不区分大小写)。
但是如果你不能这样做,你能做的最好的就是获取不区分大小写匹配的文件名列表,并检查它是否是一个值。唉,这是一个混乱的操作,因为glob
没有-nocase
选项(很少有人想要这样的东西),所以我们需要使用string match -nocase
来帮助:
set files [lmap f [glob *.html] {
expr {[string match -nocase ${channel}.html $f] ? $f : [continue]}
}]
if {[llength $files] == 1} {
set channel_file [lindex $files 0]
} else {
# Oh no! Ambiguity!
}
lmap
从 Tcl 8.6 开始使用;早期版本的 Tcl 应该使用它来代替:
set files {}
foreach f [glob *.html] {
if {[string match -nocase ${channel}.html $f]} {
lappend files $f
}
}
if {[llength $files] == 1} {
set channel_file [lindex $files 0]
} else {
# Oh no! Ambiguity!
}