适用于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上完成这项工作?
答案 0 :(得分:2)
自列表展开(eval
)was 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。