我需要将程序输出重定向到文件,下面是我用来创建输出日志文件名的代码:
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和常量形式接收日志文件时,如何解决这两种情况的问题?
答案 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]
后一种选择是首选。