为什么文件名没有正确呈现
Why filename is not getting rendered properly
我需要将程序的输出重定向到一个文件,下面是我用来创建输出日志文件名的代码:
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 和常量时,如何解决这两种情况的问题?
Tcl
会做 backslash substitution 并且这些替换只会用双引号引起来。如果您需要文字反斜杠,则必须将其转义。当用大括号括起来时,这些替换将不会发生。
因此,您可以将变量定义为
set filename "C:\tools\tcl\bin\my.log"
或
set filename {C:\tools\tcl\bin\my.log}
关于命令行参数的东西,不用费心了。 Tcl
会处理的。它将按原样从您的终端接收。
But this prints :
The log file C: ools cinmy.log
这是因为双引号之间的文字字符串被反斜杠替换。例如,"\t"
被解释为制表符控制字符,而不是被解释为以 \
作为分隔符的文件路径元素。
您的选择:
- 转义单个反斜杠:
"\t"
变为 "\t"
- 使用大括号,防止反斜杠替换发生:
"\t"
变为 {\t}
使用Tcl的[file]
命令assemble文件路径:
file nativename [file join C:/ tools tcl bin my.log]
后一个选项是首选。
我需要将程序的输出重定向到一个文件,下面是我用来创建输出日志文件名的代码:
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 和常量时,如何解决这两种情况的问题?
Tcl
会做 backslash substitution 并且这些替换只会用双引号引起来。如果您需要文字反斜杠,则必须将其转义。当用大括号括起来时,这些替换将不会发生。
因此,您可以将变量定义为
set filename "C:\tools\tcl\bin\my.log"
或
set filename {C:\tools\tcl\bin\my.log}
关于命令行参数的东西,不用费心了。 Tcl
会处理的。它将按原样从您的终端接收。
But this prints :
The log file C: ools cinmy.log
这是因为双引号之间的文字字符串被反斜杠替换。例如,"\t"
被解释为制表符控制字符,而不是被解释为以 \
作为分隔符的文件路径元素。
您的选择:
- 转义单个反斜杠:
"\t"
变为"\t"
- 使用大括号,防止反斜杠替换发生:
"\t"
变为{\t}
使用Tcl的
[file]
命令assemble文件路径:file nativename [file join C:/ tools tcl bin my.log]
后一个选项是首选。