在 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 上都能工作?
最佳答案
您必须使用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 .
关于linux - 右大括号后的额外字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40102060/