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

承接上一章所介紹的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命令的選項,就請您自行多加練習、運用了...

發佈了42 篇原創文章 · 獲贊 5 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章