2016-11-07 118 views
0

當試圖從tcl打印製表符(ASCII十六進制0x09)時,它將轉換爲空格(ASCII十六進制0x20)。我該如何避免這種行爲,並在終端窗口上獲取製表符本身?終端窗口上的TCL打印選項卡字符

% puts "aa\t\tbb" 
aa    bb 

aabb錯誤地充滿了0x20的字符,而不是兩個×09字符之間的空間。

% puts "aa\u0009\u0009bb\n" 
aa    bb 

同樣的結果。雖然字符串似乎包含0x09:

% set a "aa\t\tbb" 
aa    bb 
% string length $a 
6 

所以這只是一個puts的行爲。

背景: 我希望製表符存在,因此我可以將終端中的數字列表複製粘貼到電子表格中,其中數字以不同的電子表格單元格結尾。

回答

0

Tcl本身將寫入真正的標籤 - puts命令不會將標籤翻譯成任何我知道的任何模式 - 但終端會決定如何處理它們。看起來你的終端正在用空格替換標籤; 它在角色離開Tcl的控制之後發生,,所以它沒有多少功能。

您可以通過將代碼輸出重定向到文件並使用文本編輯器或od -c(如果您有一套POSIX工具)直接查看該文件來驗證我說的是真實的。該標籤將在那裏。在寫入文件和寫入終端之間,Tcl不會顯着改變行爲;如果這是真的,那將是一個可怕的錯誤。 (技術上可能的是,在stdout頻道上有一個輸出濾波器正在進行轉換,但這不太可能!而且,如果不知道它,它更不可能在那裏存在)。

+0

是的,你是對的。問題似乎是終端:'echo -e「xx \ t \ tyy」| hexdump'列出了製表符,但'echo -e「xx \ t \ tyy」'打印終端上的空格。嘗試了各種'stty'選項,但沒有運氣。 –

相關問題