为什么文件名无法正确呈现

时间:2019-08-22 06:46:05

标签: tcl

我需要将程序输出重定向到文件,下面是我用来创建输出日志文件名的代码:

set filename "C:\tools\tcl\bin\my.log"
puts "The log file $filename"

但这会打印:

 The log file C: ools    cinmy.log

请注意,我还可以接收文件名作为脚本的参数:

set logfile [lindex $argv 1]

当以arg和常量形式接收日志文件时,如何解决这两种情况的问题?

2 个答案:

答案 0 :(得分:1)

Tcl将执行backslash substitution,并且这些替换将仅使用双引号进行。如果需要文字反斜杠,则必须转义它。当用大括号括起来时,这些替换将不会发生。

因此,您可以将变量定义为

set filename "C:\\tools\\tcl\\bin\\my.log"

set filename {C:\tools\tcl\bin\my.log}

关于命令行参数的东西,不要打扰。 Tcl会照顾好它。它将直接从您的终端接收。

答案 1 :(得分:0)

  

但这会打印:

     

The log file C: ools cinmy.log

这是因为双引号之间的文字字符串会受到反斜杠替换。例如,"\t"被解释为制表符控制字符,而不是用\作为分隔符的文件路径元素。

您的选择:

  • 转义单个反斜杠:"\t"变为"\\t"
  • 使用花括号,以防止出现反斜杠替换:"\t"变为{\t}
  • 使用Tcl的[file]命令来汇编文件路径:

    file nativename [file join C:/ tools tcl bin my.log]

后一种选择是首选。