Bash

如何在bash中列印由TAB分隔的字元串?

  • December 16, 2018

我正在嘗試列印由 TAB 分隔的兩個字元串。我試過了:

echo -e 'foo\tbar'
printf '%s\t%s\n' foo bar

他們都列印:

foo     bar

兩者之間的空格實際上是 5 個空格(根據在 Putty 中使用滑鼠選擇輸出)。

我也嘗試過在輸入命令時使用 CTRL+V 並按 TAB,結果相同。

強制標籤列印為標籤的正確方法是什麼,所以我可以選擇輸出並將其複製到其他地方,帶有標籤?

第二個問題:為什麼 bash 將製表符擴展到空格?

更新:顯然,這是膩子的問題: https ://superuser.com/questions/656838/how-to-make-putty-display-tabs-within-a-file-instead-of-changing-them-to -空格

就像 ilkkachu 所說,這不是 bash 的問題,而是終端仿真器將製表符轉換為輸出時的空格。

檢查不同的終端,putty、xterm 和 konsole 將製表符轉換為空格,而 urxvt 和 gnome-terminal 不會。因此,另一種解決方案是切換終端。

兩者之間的空格實際上是 5 個空格。

不,這不對。不在echoor的輸出中printf

$ echo -e 'foo\tbar' | od -c
0000000   f   o   o  \t   b   a   r  \n
0000010

強制標籤列印為標籤的正確方法是什麼,所以我可以選擇輸出並將其複製到其他地方,帶有標籤?

這是一個不同的問題。這與 shell 無關,而是與終端仿真器有關,它在輸出時將製表符轉換為空格。許多人,但並非所有人都這樣做。

將帶有製表符的輸出重定向到一個文件,然後從那裡複製它,或者unexpand在輸出上使用將空格轉換為製表符可能會更容易。(儘管它也無法知道製表符的開頭是什麼空格,並且如果可能的話,會將所有空格都轉換為製表符。)這當然取決於您需要對輸出做什麼。

引用自:https://unix.stackexchange.com/questions/489150