$ echo -e "a\tb\tc\nd\te\tf"
a b c
d e f
上例运用\t来区隔abc还有def,及用\n将def换至下一行。
例二:
$ echo -e "\141\011\142\011\143\012\144\011\145\011\146"
a b c
d e f
与例一的结果一样,只是使用ASCII八进位编码。
例三:
$ echo -e "\x61\x09\x62\x09\x63\x0a\x64\x09\x65\x09\x66"
a b c
d e f
与例二差不多,只是这次换用ASCII十六进位编码。
例四:
$ echo -ne "a\tb\tc\nd\te\bf\a"
a b c
d f $
因为e字母后面是退格键(\b),因此输出结果就没有e了。在结束时听到一声铃向,那是\a的杰作﹗
由于同时使用了-n选项,因此shell prompt紧接在第二行之后。若你不用-n的话,那你在\a后再加个\c,也是同样的效果。
事实上,在日后的shell操作及shell script设计上,echo命令是最常被使用的命令之一。
比方说,用echo来检查变量值:
$ A=B
$ echo $A
B
$ echo $?
0
(注:关于变量概念,我们留到下两章才跟大家说明。)
好了,更多的关于command line的格式,以及echo命令的选项,就请您自行多加练习、运用了…
第第4问:问:“”(双引号)与(双引号)与''(单引号)差在哪?(单引号)差在哪?
还是回到我们的command line来吧…
经过前面两章的学习,应该很清楚当你在shell prompt后面敲打键盘、直到按下Enter的时候,
你输入的文字就是command line了,然后shell才会以行程的方式执行你所交给它的命令。但是,你又可知道:你在command
line输入的每一个文字,对shell来说,是有类别之分的呢?
简单而言(我不敢说这是精确的定议,注一),command line的每一个charactor,分为如下两种:
literal:也就是普通纯文字,对shell来说没特殊功能。
meta:对shell来说,具有特定功能的特殊保留字元。(注一:关于bash shell在处理command line时的顺序说明,请参
考O'Reilly出版社之Learning the Bash Shell,2nd Edition,第177 - 180页的说明,尤其是178页的流程图Figure 7-
1…)
Literal没甚么好谈的,凡举abcd、123456这些“文字”都是literal…(easy?)。但meta却常使我们困惑…..(confused?)事
实上,前两章我们在command line中已碰到两个机乎每次都会碰到的meta:
IFS:由<space>或<tab>或<enter>三者之一组成(我们常用space)。
CR:由<enter>产生。
IFS是用来拆解command line的每一个词(word)用的,因为shell command line是按词来处理的。而CR则是用来结束
command line用的,这也是为何我们敲<enter>命令就会跑的原因。除了IFS与CR,常用的meta还有:
= : 设定变量。
$ : 作变量或运算替换(请不要与shell prompt搞混了)。
> : 重导向stdout。
< : 重导向stdin。
| : 命令管线。
& : 重导向file descriptor,或将命令置于背境执行。
() : 将其内的命令置于nested subshell执行,或用于运算或命令替换。
{} : 将其内的命令置于non-named function中执行,或用在变量替换的界定范围。