当尝试从tcl打印制表符(ASCII十六进制0x09)时,它会转换为空格(ASCII十六进制0x20)。如何避免此行为并在终端窗口中获取制表符?
% puts "aa\t\tbb"
aa bb
aa
和bb
之间的空格错误地填充了0x20个字符而不是两个0x09字符。
% puts "aa\u0009\u0009bb\n"
aa bb
结果相同。虽然字符串似乎包含0x09:
% set a "aa\t\tbb"
aa bb
% string length $a
6
所以这只是puts
行为。
背景: 我希望标签字符存在,这样我就可以将终端中的数字列表复制粘贴到电子表格中,其中的数字最终会出现在不同的电子表格单元格中。
答案 0 :(得分:0)
Tcl本身将编写真正的标签 - puts
命令不会将标签转换为我所知道的任何模式中的任何其他标签 - 但终端需要确定什么和他们一起做。您的终端似乎正在用空格替换标签; 在角色离开Tcl的控制权之后发生了,所以它不会做太多。
您可以通过将代码输出重定向到文件并使用文本编辑器或od -c
之类的工具直接查看该文件来验证我说的是真的(如果您有一套POSIX工具)。选项卡将在那里。 Tcl在写入文件和写入终端之间不会显着改变行为;如果确实如此,这将是一个可怕的错误。
(技术上可能在stdout
频道上有一个输出过滤器正在进行转换,但这不太可能!更重要的是,它&#39如果你不知道它,它就更不可能在那里。)