关闭后的额外字符

时间:2016-10-18 07:26:22

标签: linux tcl freebsd

适用于Linux的相同代码在FreeBSD上不起作用

在Linux上

% set timeZone "-4:0"
-4:0
% set timeZone [format "%+03d%02d" {*}[scan $timeZone "%d:%d"]]
-0400
% puts $tcl_version
8.5

在FreeBSD上

% set timeZone "-4:0"
-4:0
% set timeZone [format "%+03d%02d" {*}[scan $timeZone "%d:%d"]]
extra characters after close-brace
% puts $tcl_version
8.4

如何在FreeBSD和Linux上完成这项工作?

1 个答案:

答案 0 :(得分:2)

自列表展开(evalwas implemented in Tcl 8.5以来,您必须使用{*}。你也许可以使用这样的东西:

set timeZone "-4:0"
set code "format \"%+03d%02d\" [scan $timeZone "%d:%d"]"
# This gives you "format "%+03d%02d" -4 0"
set timeZone [eval $code]

如果您不喜欢转义引号,可以使用大括号(IMO更清洁一点):

set code "format {%+03d%02d} [scan $timeZone {%d:%d}]"

或者可以找到来自wiki的更精细的8.4解决方案here