我在TCL中有代码:
set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || $c == "Start") } {
puts Works
}
我想让$c == "Start"
检查不区分大小写的Start
。我该怎么办?
答案 0 :(得分:6)
您可以使用string compare
:
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
}
-nocase
开关确保它使用不区分大小写的比较,如文档所述。
另一种方法是将$c
置于统一的案例中,并将Start
与统一案例一起使用。例如,您可以将所有内容转换为小写:
set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [string tolower $c] == "start") } {
puts Works
}
或大写......
set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [string toupper $c] == "START") } {
puts Works
}
另一种选择可能是regexp
,如果你不介意探索'那个地区。
set a 1
set b 0
set c "Start"
if { $a == 1 && ($b == 1 || [regexp -nocase -- {^Start$} $c]) } {
puts Works
}
regexp
返回1
表示匹配,0
表示不匹配。 ^
和$
确保整个Start
与$c
变量匹配。结论,如果$c
与Start
相同,则会获得1
。