它確實取決於文件系統(即操作系統),因爲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!
}
爲了澄清,我沒有任何懷疑,這將工作,但是我堅持接受,因爲我還沒有機會嘗試實施。 – Daedalus 2013-03-06 08:02:40
終於有機會測試它,它工作:) – Daedalus 2013-03-09 09:20:39