2016-03-10 51 views
1

我想知道什麼一些轉義序列不包括下列內容: b, f, n, r做什麼?有什麼區別?

\b backspace 
\f form feed 
\n new line 
\r carriage return 
\t tab 

而且,是什麼形式的飼料,新的生產線,並回車之間的區別? \ t和空格有什麼區別?它們看起來都一樣...

回答

0

您可以使用printf來測試這些轉義序列,例如在C程序中或使用Unix/Linux shell(如Bash),如下所示。

  • 退格使光標越過先前字符向後移動
  • 進紙通常只用打印機中使用,以使在當前頁面被送出,以便下一個頁面是當前一個
  • 新行(換行)導致光標移動到下一行。在Unix相關係統上,這也會導致光標移動到該行的開頭。
  • 回車導致光標移動到當前行的開頭。在使用Windows(或MS-DOS)或其親屬(尤其是其控制檯)的系統上,回車和換行的組合用於新行。
  • 標籤導致光標移動到下一個標籤停止位置,該位置通常以四或八個字符位置間隔設置。這對於排列列中的數據很有用。但是,請注意,字符串格式(例如printf使用的字符串格式)更可靠,因爲使用選項卡仍可能導致列交錯。查看此答案底部的示例。
  • 空間將光標向前移動一個位置(與退格相反)。請注意,在終端上(屏幕上),空間通常是破壞性的 - 也就是說,如果一個角色處於光標移動的位置,該角色將被移除。當一個空格以外的新字符被打印在另一個字符存在的位置時(如後面的退格示例所示),同樣的事情發生。

$表示shell提示符,不應輸入。它是爲了區分你輸入的內容和輸出內容而包含的。我在每個字符串的末尾包含一個換行符\n,所以輸出佔用了自己的行。

$ printf 'help\blo - backspace\n' 
hello - backspace 
$ printf 'two\nlines - newline\n' 
two 
lines - newline 
$ printf 'clocks - carriage return\rsla\n' 
slacks - carriage return 
$ printf 'Fruit\tColor\tQuantity\ngrapes\tgreen\t100\nbananas\tyellow\t50\n- tabs\n' 
Fruit Color Quantity 
grapes green 100 
bananas yellow 50 
- tabs 

欲瞭解更多信息,請參閱ASCII Control Characters

試試這個看printf格式如何能夠改進在標籤:

$ array=(A B C 'apple pie' 'banana split' 'cherry turnover' 100 200 300) 
$ for ((i=0; i<12; i+=3)); do printf '%s\t%s\t%s\n' "${array[@]:i:3}"; done 
A  B  C 
apple pie  banana split cherry turnover 
100  200  300 
$ for ((i=0; i<12; i+=3)); do printf '%-16s%-16s%s\n' "${array[@]:i:3}"; done 
A    B    C 
apple pie  banana split cherry turnover 
100    200    300 

正如你所看到的,列不在第二版交錯和整體輸出相同的寬度。