Bash
如何在bash中列印由TAB分隔的字元串?
我正在嘗試列印由 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 個空格。
不,這不對。不在
echo
or的輸出中printf
。$ echo -e 'foo\tbar' | od -c 0000000 f o o \t b a r \n 0000010
強制標籤列印為標籤的正確方法是什麼,所以我可以選擇輸出並將其複製到其他地方,帶有標籤?
這是一個不同的問題。這與 shell 無關,而是與終端仿真器有關,它在輸出時將製表符轉換為空格。許多人,但並非所有人都這樣做。
將帶有製表符的輸出重定向到一個文件,然後從那裡複製它,或者
unexpand
在輸出上使用將空格轉換為製表符可能會更容易。(儘管它也無法知道製表符的開頭是什麼空格,並且如果可能的話,會將所有空格都轉換為製表符。)這當然取決於您需要對輸出做什麼。