linux - 右大括号后的额外字符

标签 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 上都能工作?

最佳答案

您必须使用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/

相关文章:

linux - 查找包含特定文本的行,并打印该文本之后的内容

linux - 如何在 tmux 窗口中启动脚本后自动终止 ssh 连接?

tcl - 如何使用 tcl 中的 puts 更改颜色文本

multithreading - 我需要在FreeBSD中跟踪我的内核,由于更改了调度程序,它在启动时卡住了,我该怎么做?

linux - *nix 中的等效 win API

mysql - SSD : Tools and Strategies 上的基准 MySQL

sql-server - 从运行在 GNU/Linux 上的 Tcl 访问 Microsoft SQL Server

regex - 需要有关 TCL 中正则表达式的帮助

python - 在 FreeBSD 程序中加载 linux 库(Python 脚本)

linux - 我可以使用 FreeBSD 内核制作操作系统吗?并仅构建与 Chromium-OS 相同的替代方案 HTML5