SHELL十三问之三:别人 echo、你也 echo ,是问 echo 知多少?

本文详细介绍了如何使用Linux命令行工具echo进行输出控制,包括取消换行符、使用特殊字符等高级功能,并通过实例展示了如何应用这些特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

承接上一章所介绍的command line,这里我们用echo这个命令加以进一步说明。

%c7WC(]1|QV

 

e5~Q ]P

温习---标准的command line包含三个部件:BSD爱好者乐园)j&tGPX3p1ri
* command_name option argumentBSD爱好者乐园Ml;]` b3?9O_"D L

BSD爱好者乐园 a[C^e!{O ]
echo
是一个非常简单、直接的命令:

V-Gb /Y|G-c

*argument送出至标准输出(STDOUT),通常就是在监视器(monitor)上输出。

!@|�j#iz/jn&xm

 

%^Nm5c`

为了更好理解,不如先让我们先跑一下echo命令好了:BSD爱好者乐园` F t`6z]

$ echoBSD爱好者乐园S-k-a)Z i5S
$

FsvKF? S*F

你会发现只有一个空白行,然后又回到shell prompt上了。这是因为echo在预设上,在显示完argument之后,还会送出一个换行符号(new-line charactor)。但是上面的command并没任何的argument,那结果就只剩一个换行符号了...BSD爱好者乐园CfI|*p-H;lu

若你要取消这个换行符号,可利用echo-n optionBSD爱好者乐园$]H3t(u8ZI,g.d

$ echo -n
T"c0W3U M-A)I.C(S$
BSD爱好者乐园`FDr3b|

 BSD爱好者乐园*/gL,f Ek3iH??

不妨让我们回到command line的概念上来讨论上例的echo命令好了:

9e1D!j`d

command line只有command_name(echo)option(-n),并没有任何argumentBSD爱好者乐园B y2LH6I N

 BSD爱好者乐园 d!}7m!xHDW2m3L,d1D

要想看看echoargument,那还不简单﹗接下来,你可试试如下的输入:

[e$z)es#W.p`?

$ echo first line
:d%c2Cn7W,H5aafirst line
"D*o w^2C-Q ~$ echo -n first lineBSD爱好者乐园Y;m Tp Z
first line $
BSD爱好者乐园,Y6wB4GAFQ4x['Yo

 BSD爱好者乐园th/o{Fb!H0q)nc

从上两个echo命令中,你会发现argument的部份显示在你的荧幕,而换行符号则视-n option的有无而别。很明显的,第二个echo由于换行符号被取消了,接下来的shell prompt就接在输出结果同一行了...BSD爱好者乐园~`hwye3h

BSD爱好者乐园%L~}9JFP
事实上,echo除了-n options之外,常用选项还有:BSD爱好者乐园CPu&^/]
-e:启用反斜线控制字符的转换(参考下表)BSD爱好者乐园TbP.CG+Z k0U&|
-E:关闭反斜线控制字符的转换(预设如此)
5cI-is}qQ `%Ko
-n:取消行末之换行符号(-e选项下的c字符同意)

BSD爱好者乐园2n0PZ�t:H"Jc

关于echo命令所支持的反斜线控制字符如下表:BSD爱好者乐园Xgt b-D2{#v
/aALERT / BELL (从系统喇叭送出铃声)BSD爱好者乐园r+M1cJ%M_]sqp
/bBACKSPACE,也就是向左删除键BSD爱好者乐园1uMy#]!eA
/c:取消行末之换行符号BSD爱好者乐园5p,X!iE({#urY;r
/EESCAPE,跳脱键
f?+W6Ui{)K
/fFORMFEED,换页字符
jx@-[a1rf
/nNEWLINE,换行字符
'XL,s/i;Ae(]2xtAp
/rRETURN,回车键
7^|%I�y?i*xr
/tTAB,表格跳位键
2/O z)gxq$/
/vVERTICAL TAB,垂直表格跳位键BSD爱好者乐园;tt?"D{
//nASCII八进位编码(x开首为十六进制):反斜线本身

5{+O9@kg q�B*N

(表格资料来自O'Reilly出版社之Learning the Bash Shell, 2nd Ed.)

&]-m8]/m.S

 BSD爱好者乐园%Rs/wHt]2T)F

或许,我们可以透过实例来了解echo的选项及控制字符:

s8@P ch,vd�A

例一:

d%Y*t o"s/O

$ echo -e "a/tb/tc/nd/te/tf"
H)X;jh r[(k&~a       b       c
k N5He:w#Aq e2f9Kd       e       f

2fYlE7P'IW(@

上例运用/t来区隔abc还有def,及用/ndef换至下一行。BSD爱好者乐园DA(U�/7K3[4_1oY/^`;/

 BSD爱好者乐园yD.k5k+Z;L"U'f*R

例二:

6{*q&_^hr

$ echo -e "/141/011/142/011/143/012/144/011/145/011/146"
y4]jK%V0|"g#|/TQa       b       c
9dB6[9Zod       e       f

V6A0v�US0F,T8[.v

与例一的结果一样,只是使用ASCII八进位编码。BSD爱好者乐园[9u�`{ _k'i

 

d5~Cy@*fb

例三:BSD爱好者乐园:n!Z-RbQY`

$ echo -e "/x61/x09/x62/x09/x63/x0a/x64/x09/x65/x09/x66"
6j A6PF}9u*Ra       b       cBSD爱好者乐园He$Q+q(HBJQ/i.I
d       e       f

'^&N/xXQ

与例二差不多,只是这次换用ASCII十六进制编码。BSD爱好者乐园f5?:VU%U

 

}W1C#bT/dY?:s

例四:

J7fD Qd.T

$ echo -ne "a/tb/tc/nd/te/bf/a"BSD爱好者乐园4~c,N9|8s-z
a       b       cBSD爱好者乐园"R#b%^K;ENi5d8P$G:I
d       f $

!n8o,{`4y2Jm,a(b

因为e字母后面是删除键(b),因此输出结果就没有e了。在结束时听到一声铃向,那是a的杰作﹗由于同时使用了-n选项,因此shell prompt紧接在第二行之后。若你不用-n的话,那你在a后再加个c,也是同样的效果。BSD爱好者乐园7rP$K8a KNs @


{x.[8O2@eS
事实上,在日后的shell操作及shell script设计上,echo命令是最常被使用的命令之一。比方说,用echo来检查变量值:

f~6r|6X Zu

$ A=BBSD爱好者乐园 B)R(Qsy$n3F${Y}J'A
$ echo $A
.n9G/d;oV4}LB
iy JC/d)A$ echo $?
V x _3|]g0

%q9zZG x i,DF1C

(注:关于变量概念,我们留到下两章才跟大家说明。)
.X(t4_u)c
好了,更多的关于command line的格式,以及echo命令的选项,就请您自行多加练习、运用了...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值