比较TCL中的两个路径

时间:2015-03-15 18:43:00

标签: compare tcl matching

我在Linux /home/probil/xilinxip/pll1.xci中有一条路径正在读取该文件。现在我想将此路径与该文件中存在的所有路径进行比较,如果匹配则打印文件存在于文件中。 文件具有相似格式的许多路径。如果我使用if语句就会出错。

set xci_source_files_ip [file normalize "$origin_dir/xci_source_files.f"]
set xci_source [open $xci_source_files_ip r]

while {[gets $xci_source file] > -1} {
set file $file
set file [file normalize $file]
#if{[$file] eq ["/home/probil/xilinxip/pll1.xci"]}{
   puts "file matched"
}

1 个答案:

答案 0 :(得分:2)

文件名应该作为简单的字符串进行比较(通常在规范化之后,尽管有些情况下您不想这样做)。因此,你这样做:

if {$file eq $file2} {
    puts "They're the same thing!"
}

或者,规范化:

if {[file normalize $file] eq [file normalize $file2]} {
    puts "They're the same thing!"
}

如果你正在比较一个你知道已经是规范化文件名的常量,你可以省略做显式规范化(但是文件名文字需要在表达式中用双引号或括号,作为表达式语法的一部分) :

if {$file eq "/home/probil/xilinxip/pll1.xci"} {
    puts "They're the same thing!"
}
if {[file normalize $file] eq "/home/probil/xilinxip/pll1.xci"} {
    puts "They're the same thing!"
}

不要把它们放在方括号中虽然(if {[$file1] eq ["..."]})因为方括号是Tcl中的命令替换;你最终试图用一个相当奇怪的名字来调用一个命令,这个名字通常不起作用!