我在TCL中有代码:
set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || $c == "Start") } {
puts Works
}
Run Code Online (Sandbox Code Playgroud)
我想 $c == "Start"检查不区分大小写Start.我该怎么做?
你可以使用string compare:
Run Code Online (Sandbox Code Playgroud)string compare ?-nocase? ?-length int? string1 string2对字符串
string1和字符串执行逐个字符的比较string2.返回-1,,0或1取决于string1词典上是否小于,等于或大于string2.如果-length指定,则在比较中仅使用第一个长度字符.如果-length是否定的,则忽略它.如果-nocase指定,则以不区分大小写的方式比较字符串.
所以,如果它返回0,那么你就$c完全等于String.
set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [string compare -nocase $c "Start"] == 0) } {
puts Works
}
Run Code Online (Sandbox Code Playgroud)
所述-nocase开关可以确保它使用区分大小写的比较作为文档中提到.
另一种方法是制作$c统一的箱子并使用Start统一的箱子.例如,您可以将所有内容转换为小写:
set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [string tolower $c] == "start") } {
puts Works
}
Run Code Online (Sandbox Code Playgroud)
或大写......
set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [string toupper $c] == "START") } {
puts Works
}
Run Code Online (Sandbox Code Playgroud)
regexp如果您不介意"探索"该区域,可以选择另一种方法.
set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [regexp -nocase -- {^Start$} $c]) } {
puts Works
}
Run Code Online (Sandbox Code Playgroud)
regexp返回1匹配和0不匹配.在^和$确保整个Start是对匹配$c变量.结论,如果$c是相同的Start,你得到1.