【发布时间】:2016-06-26 00:32:35
【问题描述】:
我想知道一些转义序列做了什么,包括以下内容:
\b backspace
\f form feed
\n new line
\r carriage return
\t tab
另外,换页、换行和回车有什么区别? \t 和空格有什么区别?它们看起来都一样...
【问题讨论】:
标签: escaping
我想知道一些转义序列做了什么,包括以下内容:
\b backspace
\f form feed
\n new line
\r carriage return
\t tab
另外,换页、换行和回车有什么区别? \t 和空格有什么区别?它们看起来都一样...
【问题讨论】:
标签: escaping
您可以使用printf 测试这些转义序列,例如在 C 程序中或使用 Unix/Linux shell(如 Bash),如下所示。
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
如您所见,第二个版本中的列没有交错排列,总体上输出宽度相同。
【讨论】: